From 46e92edf43e9ea8f042aa5acfbbcd9df21c3d9c1 Mon Sep 17 00:00:00 2001 From: Adrian Amaglio Date: Tue, 3 Mar 2020 00:01:32 +0100 Subject: [PATCH] :fire: big clean --- .gitignore | 4 +- public/503.html => 503.html | 0 blog-generator/Makefile => Makefile | 2 +- .../bin/__pycache__/rst2html.cpython-38.pyc | Bin 545 -> 0 bytes .../bin/__pycache__/rst2html4.cpython-38.pyc | Bin 667 -> 0 bytes .../bin/__pycache__/rst2html5.cpython-38.pyc | Bin 663 -> 0 bytes .../bin/__pycache__/rst2latex.cpython-38.pyc | Bin 678 -> 0 bytes .../bin/__pycache__/rst2man.cpython-38.pyc | Bin 633 -> 0 bytes .../bin/__pycache__/rst2odt.cpython-38.pyc | Bin 706 -> 0 bytes .../rst2odt_prepstyles.cpython-38.pyc | Bin 1643 -> 0 bytes .../__pycache__/rst2pseudoxml.cpython-38.pyc | Bin 551 -> 0 bytes .../bin/__pycache__/rst2s5.cpython-38.pyc | Bin 590 -> 0 bytes .../bin/__pycache__/rst2xetex.cpython-38.pyc | Bin 764 -> 0 bytes .../bin/__pycache__/rst2xml.cpython-38.pyc | Bin 553 -> 0 bytes .../__pycache__/rstpep2html.cpython-38.pyc | Bin 613 -> 0 bytes blog-generator/venv/bin/activate | 78 - blog-generator/venv/bin/activate.csh | 42 - blog-generator/venv/bin/activate.fish | 76 - blog-generator/venv/bin/activate.ps1 | 150 - blog-generator/venv/bin/activate_this.py | 36 - blog-generator/venv/bin/easy_install | 11 - blog-generator/venv/bin/easy_install-3.8 | 11 - blog-generator/venv/bin/markdown_py | 8 - blog-generator/venv/bin/pelican | 8 - blog-generator/venv/bin/pelican-import | 8 - blog-generator/venv/bin/pelican-quickstart | 8 - blog-generator/venv/bin/pelican-themes | 8 - blog-generator/venv/bin/pip | 11 - blog-generator/venv/bin/pip3 | 11 - blog-generator/venv/bin/pip3.8 | 11 - blog-generator/venv/bin/pygmentize | 8 - blog-generator/venv/bin/python | Bin 14088 -> 0 bytes blog-generator/venv/bin/python-config | 78 - blog-generator/venv/bin/python3 | 1 - blog-generator/venv/bin/python3.8 | 1 - blog-generator/venv/bin/rst2html.py | 23 - blog-generator/venv/bin/rst2html4.py | 26 - blog-generator/venv/bin/rst2html5.py | 35 - blog-generator/venv/bin/rst2latex.py | 26 - blog-generator/venv/bin/rst2man.py | 26 - blog-generator/venv/bin/rst2odt.py | 30 - blog-generator/venv/bin/rst2odt_prepstyles.py | 67 - blog-generator/venv/bin/rst2pseudoxml.py | 23 - blog-generator/venv/bin/rst2s5.py | 24 - blog-generator/venv/bin/rst2xetex.py | 27 - blog-generator/venv/bin/rst2xml.py | 23 - blog-generator/venv/bin/rstpep2html.py | 25 - blog-generator/venv/bin/unidecode | 8 - blog-generator/venv/bin/wheel | 11 - blog-generator/venv/include/python3.8 | 1 - .../venv/lib/python3.8/__future__.py | 1 - .../__pycache__/__future__.cpython-38.pyc | Bin 4169 -> 0 bytes .../__pycache__/_bootlocale.cpython-38.pyc | Bin 1281 -> 0 bytes .../_collections_abc.cpython-38.pyc | Bin 28779 -> 0 bytes .../__pycache__/_weakrefset.cpython-38.pyc | Bin 7638 -> 0 bytes .../python3.8/__pycache__/abc.cpython-38.pyc | Bin 5372 -> 0 bytes .../__pycache__/base64.cpython-38.pyc | Bin 17107 -> 0 bytes .../__pycache__/bisect.cpython-38.pyc | Bin 2392 -> 0 bytes .../__pycache__/codecs.cpython-38.pyc | Bin 33951 -> 0 bytes .../python3.8/__pycache__/copy.cpython-38.pyc | Bin 7001 -> 0 bytes .../__pycache__/copyreg.cpython-38.pyc | Bin 4356 -> 0 bytes .../python3.8/__pycache__/enum.cpython-38.pyc | Bin 24437 -> 0 bytes .../__pycache__/fnmatch.cpython-38.pyc | Bin 3370 -> 0 bytes .../__pycache__/functools.cpython-38.pyc | Bin 27935 -> 0 bytes .../__pycache__/genericpath.cpython-38.pyc | Bin 4039 -> 0 bytes .../__pycache__/hashlib.cpython-38.pyc | Bin 6765 -> 0 bytes .../__pycache__/heapq.cpython-38.pyc | Bin 14108 -> 0 bytes .../python3.8/__pycache__/hmac.cpython-38.pyc | Bin 6426 -> 0 bytes .../python3.8/__pycache__/imp.cpython-38.pyc | Bin 9847 -> 0 bytes .../python3.8/__pycache__/io.cpython-38.pyc | Bin 3492 -> 0 bytes .../__pycache__/keyword.cpython-38.pyc | Bin 1036 -> 0 bytes .../__pycache__/linecache.cpython-38.pyc | Bin 3877 -> 0 bytes .../__pycache__/locale.cpython-38.pyc | Bin 34727 -> 0 bytes .../__pycache__/ntpath.cpython-38.pyc | Bin 14695 -> 0 bytes .../__pycache__/operator.cpython-38.pyc | Bin 13729 -> 0 bytes .../python3.8/__pycache__/os.cpython-38.pyc | Bin 31361 -> 0 bytes .../__pycache__/posixpath.cpython-38.pyc | Bin 10466 -> 0 bytes .../__pycache__/random.cpython-38.pyc | Bin 20146 -> 0 bytes .../python3.8/__pycache__/re.cpython-38.pyc | Bin 14346 -> 0 bytes .../__pycache__/reprlib.cpython-38.pyc | Bin 5341 -> 0 bytes .../__pycache__/shutil.cpython-38.pyc | Bin 36338 -> 0 bytes .../python3.8/__pycache__/site.cpython-38.pyc | Bin 22196 -> 0 bytes .../__pycache__/sre_compile.cpython-38.pyc | Bin 15180 -> 0 bytes .../__pycache__/sre_constants.cpython-38.pyc | Bin 6397 -> 0 bytes .../__pycache__/sre_parse.cpython-38.pyc | Bin 21685 -> 0 bytes .../python3.8/__pycache__/stat.cpython-38.pyc | Bin 4410 -> 0 bytes .../__pycache__/struct.cpython-38.pyc | Bin 368 -> 0 bytes .../__pycache__/tarfile.cpython-38.pyc | Bin 62572 -> 0 bytes .../__pycache__/tempfile.cpython-38.pyc | Bin 23497 -> 0 bytes .../__pycache__/token.cpython-38.pyc | Bin 2523 -> 0 bytes .../__pycache__/tokenize.cpython-38.pyc | Bin 17198 -> 0 bytes .../__pycache__/types.cpython-38.pyc | Bin 9215 -> 0 bytes .../__pycache__/warnings.cpython-38.pyc | Bin 13794 -> 0 bytes .../__pycache__/weakref.cpython-38.pyc | Bin 19556 -> 0 bytes .../venv/lib/python3.8/_bootlocale.py | 1 - .../venv/lib/python3.8/_collections_abc.py | 1 - .../venv/lib/python3.8/_dummy_thread.py | 1 - .../venv/lib/python3.8/_weakrefset.py | 1 - blog-generator/venv/lib/python3.8/abc.py | 1 - blog-generator/venv/lib/python3.8/base64.py | 1 - blog-generator/venv/lib/python3.8/bisect.py | 1 - blog-generator/venv/lib/python3.8/codecs.py | 1 - blog-generator/venv/lib/python3.8/collections | 1 - .../lib/python3.8/config-3.8-x86_64-linux-gnu | 1 - blog-generator/venv/lib/python3.8/copy.py | 1 - blog-generator/venv/lib/python3.8/copyreg.py | 1 - .../venv/lib/python3.8/distutils/__init__.py | 116 - .../__pycache__/__init__.cpython-38.pyc | Bin 2821 -> 0 bytes .../lib/python3.8/distutils/distutils.cfg | 6 - blog-generator/venv/lib/python3.8/encodings | 1 - blog-generator/venv/lib/python3.8/enum.py | 1 - blog-generator/venv/lib/python3.8/fnmatch.py | 1 - .../venv/lib/python3.8/functools.py | 1 - .../venv/lib/python3.8/genericpath.py | 1 - blog-generator/venv/lib/python3.8/hashlib.py | 1 - blog-generator/venv/lib/python3.8/heapq.py | 1 - blog-generator/venv/lib/python3.8/hmac.py | 1 - blog-generator/venv/lib/python3.8/imp.py | 1 - blog-generator/venv/lib/python3.8/importlib | 1 - blog-generator/venv/lib/python3.8/io.py | 1 - blog-generator/venv/lib/python3.8/keyword.py | 1 - blog-generator/venv/lib/python3.8/lib-dynload | 1 - .../venv/lib/python3.8/linecache.py | 1 - blog-generator/venv/lib/python3.8/locale.py | 1 - .../lib/python3.8/no-global-site-packages.txt | 0 blog-generator/venv/lib/python3.8/ntpath.py | 1 - blog-generator/venv/lib/python3.8/operator.py | 1 - .../venv/lib/python3.8/orig-prefix.txt | 1 - blog-generator/venv/lib/python3.8/os.py | 1 - .../venv/lib/python3.8/posixpath.py | 1 - blog-generator/venv/lib/python3.8/random.py | 1 - blog-generator/venv/lib/python3.8/re.py | 1 - blog-generator/venv/lib/python3.8/reprlib.py | 1 - .../venv/lib/python3.8/rlcompleter.py | 1 - blog-generator/venv/lib/python3.8/shutil.py | 1 - .../Jinja2-2.11.1.dist-info/INSTALLER | 1 - .../Jinja2-2.11.1.dist-info/LICENSE.rst | 28 - .../Jinja2-2.11.1.dist-info/METADATA | 106 - .../Jinja2-2.11.1.dist-info/RECORD | 61 - .../Jinja2-2.11.1.dist-info/WHEEL | 6 - .../Jinja2-2.11.1.dist-info/entry_points.txt | 3 - .../Jinja2-2.11.1.dist-info/top_level.txt | 1 - .../Markdown-3.2.1.dist-info/INSTALLER | 1 - .../Markdown-3.2.1.dist-info/LICENSE.md | 29 - .../Markdown-3.2.1.dist-info/METADATA | 57 - .../Markdown-3.2.1.dist-info/RECORD | 74 - .../Markdown-3.2.1.dist-info/WHEEL | 6 - .../Markdown-3.2.1.dist-info/entry_points.txt | 23 - .../Markdown-3.2.1.dist-info/top_level.txt | 1 - .../MarkupSafe-1.1.1.dist-info/INSTALLER | 1 - .../MarkupSafe-1.1.1.dist-info/LICENSE.txt | 28 - .../MarkupSafe-1.1.1.dist-info/METADATA | 105 - .../MarkupSafe-1.1.1.dist-info/RECORD | 16 - .../MarkupSafe-1.1.1.dist-info/WHEEL | 5 - .../MarkupSafe-1.1.1.dist-info/top_level.txt | 1 - .../Pygments-2.5.2.dist-info/AUTHORS | 228 - .../Pygments-2.5.2.dist-info/INSTALLER | 1 - .../Pygments-2.5.2.dist-info/LICENSE | 25 - .../Pygments-2.5.2.dist-info/METADATA | 50 - .../Pygments-2.5.2.dist-info/RECORD | 451 - .../Pygments-2.5.2.dist-info/WHEEL | 6 - .../Pygments-2.5.2.dist-info/entry_points.txt | 3 - .../Pygments-2.5.2.dist-info/top_level.txt | 1 - .../Unidecode-1.1.1.dist-info/DESCRIPTION.rst | 237 - .../Unidecode-1.1.1.dist-info/INSTALLER | 1 - .../Unidecode-1.1.1.dist-info/LICENSE.txt | 339 - .../Unidecode-1.1.1.dist-info/METADATA | 261 - .../Unidecode-1.1.1.dist-info/RECORD | 394 - .../Unidecode-1.1.1.dist-info/WHEEL | 6 - .../entry_points.txt | 3 - .../Unidecode-1.1.1.dist-info/metadata.json | 1 - .../Unidecode-1.1.1.dist-info/top_level.txt | 1 - .../__pycache__/easy_install.cpython-38.pyc | Bin 285 -> 0 bytes .../__pycache__/six.cpython-38.pyc | Bin 26852 -> 0 bytes .../blinker-1.4.dist-info/AUTHORS | 8 - .../blinker-1.4.dist-info/INSTALLER | 1 - .../blinker-1.4.dist-info/LICENSE | 20 - .../blinker-1.4.dist-info/METADATA | 103 - .../blinker-1.4.dist-info/RECORD | 15 - .../site-packages/blinker-1.4.dist-info/WHEEL | 5 - .../blinker-1.4.dist-info/top_level.txt | 1 - .../site-packages/blinker/__init__.py | 22 - .../__pycache__/__init__.cpython-38.pyc | Bin 414 -> 0 bytes .../__pycache__/_saferef.cpython-38.pyc | Bin 7235 -> 0 bytes .../__pycache__/_utilities.cpython-38.pyc | Bin 5550 -> 0 bytes .../blinker/__pycache__/base.cpython-38.pyc | Bin 14312 -> 0 bytes .../site-packages/blinker/_saferef.py | 234 - .../site-packages/blinker/_utilities.py | 163 - .../python3.8/site-packages/blinker/base.py | 455 - .../site-packages/dateutil/__init__.py | 8 - .../__pycache__/__init__.cpython-38.pyc | Bin 349 -> 0 bytes .../__pycache__/_common.cpython-38.pyc | Bin 1395 -> 0 bytes .../__pycache__/_version.cpython-38.pyc | Bin 161 -> 0 bytes .../__pycache__/easter.cpython-38.pyc | Bin 2166 -> 0 bytes .../__pycache__/relativedelta.cpython-38.pyc | Bin 14873 -> 0 bytes .../dateutil/__pycache__/rrule.cpython-38.pyc | Bin 43478 -> 0 bytes .../dateutil/__pycache__/tzwin.cpython-38.pyc | Bin 164 -> 0 bytes .../dateutil/__pycache__/utils.cpython-38.pyc | Bin 2226 -> 0 bytes .../site-packages/dateutil/_common.py | 43 - .../site-packages/dateutil/_version.py | 4 - .../site-packages/dateutil/easter.py | 89 - .../site-packages/dateutil/parser/__init__.py | 61 - .../__pycache__/__init__.cpython-38.pyc | Bin 2047 -> 0 bytes .../parser/__pycache__/_parser.cpython-38.pyc | Bin 40422 -> 0 bytes .../__pycache__/isoparser.cpython-38.pyc | Bin 11154 -> 0 bytes .../site-packages/dateutil/parser/_parser.py | 1609 ---- .../dateutil/parser/isoparser.py | 411 - .../site-packages/dateutil/relativedelta.py | 599 -- .../python3.8/site-packages/dateutil/rrule.py | 1735 ---- .../site-packages/dateutil/tz/__init__.py | 12 - .../tz/__pycache__/__init__.cpython-38.pyc | Bin 680 -> 0 bytes .../tz/__pycache__/_common.cpython-38.pyc | Bin 10723 -> 0 bytes .../tz/__pycache__/_factories.cpython-38.pyc | Bin 2834 -> 0 bytes .../dateutil/tz/__pycache__/tz.cpython-38.pyc | Bin 44848 -> 0 bytes .../tz/__pycache__/win.cpython-38.pyc | Bin 11228 -> 0 bytes .../site-packages/dateutil/tz/_common.py | 419 - .../site-packages/dateutil/tz/_factories.py | 80 - .../python3.8/site-packages/dateutil/tz/tz.py | 1849 ---- .../site-packages/dateutil/tz/win.py | 370 - .../python3.8/site-packages/dateutil/tzwin.py | 2 - .../python3.8/site-packages/dateutil/utils.py | 71 - .../dateutil/zoneinfo/__init__.py | 167 - .../__pycache__/__init__.cpython-38.pyc | Bin 5662 -> 0 bytes .../__pycache__/rebuild.cpython-38.pyc | Bin 1871 -> 0 bytes .../zoneinfo/dateutil-zoneinfo.tar.gz | Bin 153315 -> 0 bytes .../dateutil/zoneinfo/rebuild.py | 53 - .../docutils-0.16.dist-info/COPYING.txt | 137 - .../docutils-0.16.dist-info/INSTALLER | 1 - .../docutils-0.16.dist-info/METADATA | 64 - .../docutils-0.16.dist-info/RECORD | 332 - .../docutils-0.16.dist-info/WHEEL | 6 - .../docutils-0.16.dist-info/top_level.txt | 1 - .../site-packages/docutils/__init__.py | 233 - .../__pycache__/__init__.cpython-38.pyc | Bin 3952 -> 0 bytes .../docutils/__pycache__/core.cpython-38.pyc | Bin 21680 -> 0 bytes .../__pycache__/examples.cpython-38.pyc | Bin 3336 -> 0 bytes .../__pycache__/frontend.cpython-38.pyc | Bin 26902 -> 0 bytes .../docutils/__pycache__/io.cpython-38.pyc | Bin 13275 -> 0 bytes .../docutils/__pycache__/nodes.cpython-38.pyc | Bin 82071 -> 0 bytes .../__pycache__/statemachine.cpython-38.pyc | Bin 49143 -> 0 bytes .../python3.8/site-packages/docutils/core.py | 666 -- .../site-packages/docutils/examples.py | 97 - .../site-packages/docutils/frontend.py | 863 -- .../python3.8/site-packages/docutils/io.py | 481 - .../docutils/languages/__init__.py | 47 - .../__pycache__/__init__.cpython-38.pyc | Bin 1118 -> 0 bytes .../languages/__pycache__/af.cpython-38.pyc | Bin 1057 -> 0 bytes .../languages/__pycache__/ca.cpython-38.pyc | Bin 1100 -> 0 bytes .../languages/__pycache__/cs.cpython-38.pyc | Bin 1079 -> 0 bytes .../languages/__pycache__/da.cpython-38.pyc | Bin 1079 -> 0 bytes .../languages/__pycache__/de.cpython-38.pyc | Bin 1061 -> 0 bytes .../languages/__pycache__/en.cpython-38.pyc | Bin 1012 -> 0 bytes .../languages/__pycache__/eo.cpython-38.pyc | Bin 1072 -> 0 bytes .../languages/__pycache__/es.cpython-38.pyc | Bin 1134 -> 0 bytes .../languages/__pycache__/fa.cpython-38.pyc | Bin 1163 -> 0 bytes .../languages/__pycache__/fi.cpython-38.pyc | Bin 1149 -> 0 bytes .../languages/__pycache__/fr.cpython-38.pyc | Bin 1082 -> 0 bytes .../languages/__pycache__/gl.cpython-38.pyc | Bin 1124 -> 0 bytes .../languages/__pycache__/he.cpython-38.pyc | Bin 1147 -> 0 bytes .../languages/__pycache__/it.cpython-38.pyc | Bin 1084 -> 0 bytes .../languages/__pycache__/ja.cpython-38.pyc | Bin 1087 -> 0 bytes .../languages/__pycache__/ko.cpython-38.pyc | Bin 1065 -> 0 bytes .../languages/__pycache__/lt.cpython-38.pyc | Bin 1140 -> 0 bytes .../languages/__pycache__/lv.cpython-38.pyc | Bin 1148 -> 0 bytes .../languages/__pycache__/nl.cpython-38.pyc | Bin 1058 -> 0 bytes .../languages/__pycache__/pl.cpython-38.pyc | Bin 1095 -> 0 bytes .../__pycache__/pt_br.cpython-38.pyc | Bin 1123 -> 0 bytes .../languages/__pycache__/ru.cpython-38.pyc | Bin 1462 -> 0 bytes .../languages/__pycache__/sk.cpython-38.pyc | Bin 1092 -> 0 bytes .../languages/__pycache__/sv.cpython-38.pyc | Bin 1062 -> 0 bytes .../__pycache__/zh_cn.cpython-38.pyc | Bin 1114 -> 0 bytes .../__pycache__/zh_tw.cpython-38.pyc | Bin 1452 -> 0 bytes .../site-packages/docutils/languages/af.py | 58 - .../site-packages/docutils/languages/ca.py | 60 - .../site-packages/docutils/languages/cs.py | 60 - .../site-packages/docutils/languages/da.py | 62 - .../site-packages/docutils/languages/de.py | 58 - .../site-packages/docutils/languages/en.py | 60 - .../site-packages/docutils/languages/eo.py | 61 - .../site-packages/docutils/languages/es.py | 59 - .../site-packages/docutils/languages/fa.py | 61 - .../site-packages/docutils/languages/fi.py | 60 - .../site-packages/docutils/languages/fr.py | 58 - .../site-packages/docutils/languages/gl.py | 63 - .../site-packages/docutils/languages/he.py | 60 - .../site-packages/docutils/languages/it.py | 58 - .../site-packages/docutils/languages/ja.py | 61 - .../site-packages/docutils/languages/ko.py | 61 - .../site-packages/docutils/languages/lt.py | 61 - .../site-packages/docutils/languages/lv.py | 60 - .../site-packages/docutils/languages/nl.py | 60 - .../site-packages/docutils/languages/pl.py | 62 - .../site-packages/docutils/languages/pt_br.py | 60 - .../site-packages/docutils/languages/ru.py | 59 - .../site-packages/docutils/languages/sk.py | 58 - .../site-packages/docutils/languages/sv.py | 60 - .../site-packages/docutils/languages/zh_cn.py | 67 - .../site-packages/docutils/languages/zh_tw.py | 66 - .../python3.8/site-packages/docutils/nodes.py | 2317 ----- .../docutils/parsers/__init__.py | 51 - .../__pycache__/__init__.cpython-38.pyc | Bin 1732 -> 0 bytes .../parsers/__pycache__/null.cpython-38.pyc | Bin 631 -> 0 bytes .../site-packages/docutils/parsers/null.py | 20 - .../docutils/parsers/rst/__init__.py | 416 - .../rst/__pycache__/__init__.cpython-38.pyc | Bin 14966 -> 0 bytes .../rst/__pycache__/roles.cpython-38.pyc | Bin 11360 -> 0 bytes .../rst/__pycache__/states.cpython-38.pyc | Bin 92280 -> 0 bytes .../__pycache__/tableparser.cpython-38.pyc | Bin 17572 -> 0 bytes .../parsers/rst/directives/__init__.py | 419 - .../__pycache__/__init__.cpython-38.pyc | Bin 12820 -> 0 bytes .../__pycache__/admonitions.cpython-38.pyc | Bin 3056 -> 0 bytes .../__pycache__/body.cpython-38.pyc | Bin 7941 -> 0 bytes .../__pycache__/html.cpython-38.pyc | Bin 2911 -> 0 bytes .../__pycache__/images.cpython-38.pyc | Bin 4976 -> 0 bytes .../__pycache__/misc.cpython-38.pyc | Bin 14453 -> 0 bytes .../__pycache__/parts.cpython-38.pyc | Bin 3904 -> 0 bytes .../__pycache__/references.cpython-38.pyc | Bin 994 -> 0 bytes .../__pycache__/tables.cpython-38.pyc | Bin 15194 -> 0 bytes .../parsers/rst/directives/admonitions.py | 99 - .../docutils/parsers/rst/directives/body.py | 288 - .../docutils/parsers/rst/directives/html.py | 88 - .../docutils/parsers/rst/directives/images.py | 171 - .../docutils/parsers/rst/directives/misc.py | 556 -- .../docutils/parsers/rst/directives/parts.py | 126 - .../parsers/rst/directives/references.py | 29 - .../docutils/parsers/rst/directives/tables.py | 513 -- .../docutils/parsers/rst/include/README.txt | 17 - .../docutils/parsers/rst/include/isoamsa.txt | 162 - .../docutils/parsers/rst/include/isoamsb.txt | 126 - .../docutils/parsers/rst/include/isoamsc.txt | 29 - .../docutils/parsers/rst/include/isoamsn.txt | 96 - .../docutils/parsers/rst/include/isoamso.txt | 62 - .../docutils/parsers/rst/include/isoamsr.txt | 191 - .../docutils/parsers/rst/include/isobox.txt | 46 - .../docutils/parsers/rst/include/isocyr1.txt | 73 - .../docutils/parsers/rst/include/isocyr2.txt | 32 - .../docutils/parsers/rst/include/isodia.txt | 20 - .../docutils/parsers/rst/include/isogrk1.txt | 55 - .../docutils/parsers/rst/include/isogrk2.txt | 26 - .../docutils/parsers/rst/include/isogrk3.txt | 52 - .../parsers/rst/include/isogrk4-wide.txt | 49 - .../docutils/parsers/rst/include/isogrk4.txt | 8 - .../docutils/parsers/rst/include/isolat1.txt | 68 - .../docutils/parsers/rst/include/isolat2.txt | 128 - .../parsers/rst/include/isomfrk-wide.txt | 58 - .../docutils/parsers/rst/include/isomfrk.txt | 11 - .../parsers/rst/include/isomopf-wide.txt | 32 - .../docutils/parsers/rst/include/isomopf.txt | 13 - .../parsers/rst/include/isomscr-wide.txt | 58 - .../docutils/parsers/rst/include/isomscr.txt | 17 - .../docutils/parsers/rst/include/isonum.txt | 82 - .../docutils/parsers/rst/include/isopub.txt | 90 - .../docutils/parsers/rst/include/isotech.txt | 168 - .../docutils/parsers/rst/include/mmlalias.txt | 554 -- .../parsers/rst/include/mmlextra-wide.txt | 113 - .../docutils/parsers/rst/include/mmlextra.txt | 87 - .../docutils/parsers/rst/include/s5defs.txt | 68 - .../parsers/rst/include/xhtml1-lat1.txt | 102 - .../parsers/rst/include/xhtml1-special.txt | 37 - .../parsers/rst/include/xhtml1-symbol.txt | 130 - .../parsers/rst/languages/__init__.py | 36 - .../__pycache__/__init__.cpython-38.pyc | Bin 799 -> 0 bytes .../languages/__pycache__/af.cpython-38.pyc | Bin 2350 -> 0 bytes .../languages/__pycache__/ca.cpython-38.pyc | Bin 2705 -> 0 bytes .../languages/__pycache__/cs.cpython-38.pyc | Bin 3373 -> 0 bytes .../languages/__pycache__/da.cpython-38.pyc | Bin 2373 -> 0 bytes .../languages/__pycache__/de.cpython-38.pyc | Bin 2084 -> 0 bytes .../languages/__pycache__/en.cpython-38.pyc | Bin 1717 -> 0 bytes .../languages/__pycache__/eo.cpython-38.pyc | Bin 2270 -> 0 bytes .../languages/__pycache__/es.cpython-38.pyc | Bin 2487 -> 0 bytes .../languages/__pycache__/fa.cpython-38.pyc | Bin 2366 -> 0 bytes .../languages/__pycache__/fi.cpython-38.pyc | Bin 2387 -> 0 bytes .../languages/__pycache__/fr.cpython-38.pyc | Bin 2271 -> 0 bytes .../languages/__pycache__/gl.cpython-38.pyc | Bin 2236 -> 0 bytes .../languages/__pycache__/he.cpython-38.pyc | Bin 1860 -> 0 bytes .../languages/__pycache__/it.cpython-38.pyc | Bin 2125 -> 0 bytes .../languages/__pycache__/ja.cpython-38.pyc | Bin 2482 -> 0 bytes .../languages/__pycache__/ko.cpython-38.pyc | Bin 2267 -> 0 bytes .../languages/__pycache__/lt.cpython-38.pyc | Bin 2301 -> 0 bytes .../languages/__pycache__/lv.cpython-38.pyc | Bin 2263 -> 0 bytes .../languages/__pycache__/nl.cpython-38.pyc | Bin 2300 -> 0 bytes .../languages/__pycache__/pl.cpython-38.pyc | Bin 2077 -> 0 bytes .../__pycache__/pt_br.cpython-38.pyc | Bin 2485 -> 0 bytes .../languages/__pycache__/ru.cpython-38.pyc | Bin 2814 -> 0 bytes .../languages/__pycache__/sk.cpython-38.pyc | Bin 2818 -> 0 bytes .../languages/__pycache__/sv.cpython-38.pyc | Bin 1957 -> 0 bytes .../__pycache__/zh_cn.cpython-38.pyc | Bin 2664 -> 0 bytes .../__pycache__/zh_tw.cpython-38.pyc | Bin 3643 -> 0 bytes .../docutils/parsers/rst/languages/af.py | 106 - .../docutils/parsers/rst/languages/ca.py | 125 - .../docutils/parsers/rst/languages/cs.py | 108 - .../docutils/parsers/rst/languages/da.py | 113 - .../docutils/parsers/rst/languages/de.py | 105 - .../docutils/parsers/rst/languages/en.py | 110 - .../docutils/parsers/rst/languages/eo.py | 118 - .../docutils/parsers/rst/languages/es.py | 125 - .../docutils/parsers/rst/languages/fa.py | 102 - .../docutils/parsers/rst/languages/fi.py | 98 - .../docutils/parsers/rst/languages/fr.py | 103 - .../docutils/parsers/rst/languages/gl.py | 111 - .../docutils/parsers/rst/languages/he.py | 108 - .../docutils/parsers/rst/languages/it.py | 97 - .../docutils/parsers/rst/languages/ja.py | 119 - .../docutils/parsers/rst/languages/ko.py | 111 - .../docutils/parsers/rst/languages/lt.py | 109 - .../docutils/parsers/rst/languages/lv.py | 108 - .../docutils/parsers/rst/languages/nl.py | 112 - .../docutils/parsers/rst/languages/pl.py | 102 - .../docutils/parsers/rst/languages/pt_br.py | 108 - .../docutils/parsers/rst/languages/ru.py | 89 - .../docutils/parsers/rst/languages/sk.py | 95 - .../docutils/parsers/rst/languages/sv.py | 95 - .../docutils/parsers/rst/languages/zh_cn.py | 104 - .../docutils/parsers/rst/languages/zh_tw.py | 109 - .../docutils/parsers/rst/roles.py | 399 - .../docutils/parsers/rst/states.py | 3116 ------- .../docutils/parsers/rst/tableparser.py | 542 -- .../docutils/readers/__init__.py | 112 - .../__pycache__/__init__.cpython-38.pyc | Bin 3303 -> 0 bytes .../__pycache__/doctree.cpython-38.pyc | Bin 1497 -> 0 bytes .../readers/__pycache__/pep.cpython-38.pyc | Bin 1612 -> 0 bytes .../__pycache__/standalone.cpython-38.pyc | Bin 1941 -> 0 bytes .../site-packages/docutils/readers/doctree.py | 46 - .../site-packages/docutils/readers/pep.py | 48 - .../docutils/readers/standalone.py | 66 - .../site-packages/docutils/statemachine.py | 1539 ---- .../docutils/transforms/__init__.py | 172 - .../__pycache__/__init__.cpython-38.pyc | Bin 5358 -> 0 bytes .../__pycache__/components.cpython-38.pyc | Bin 2145 -> 0 bytes .../__pycache__/frontmatter.cpython-38.pyc | Bin 16529 -> 0 bytes .../__pycache__/misc.cpython-38.pyc | Bin 3785 -> 0 bytes .../__pycache__/parts.cpython-38.pyc | Bin 6015 -> 0 bytes .../__pycache__/peps.cpython-38.pyc | Bin 8982 -> 0 bytes .../__pycache__/references.cpython-38.pyc | Bin 24333 -> 0 bytes .../__pycache__/universal.cpython-38.pyc | Bin 8493 -> 0 bytes .../__pycache__/writer_aux.cpython-38.pyc | Bin 2400 -> 0 bytes .../docutils/transforms/components.py | 52 - .../docutils/transforms/frontmatter.py | 548 -- .../site-packages/docutils/transforms/misc.py | 144 - .../docutils/transforms/parts.py | 180 - .../site-packages/docutils/transforms/peps.py | 305 - .../docutils/transforms/references.py | 911 -- .../docutils/transforms/universal.py | 320 - .../docutils/transforms/writer_aux.py | 88 - .../site-packages/docutils/utils/__init__.py | 797 -- .../utils/__pycache__/__init__.cpython-38.pyc | Bin 25111 -> 0 bytes .../__pycache__/code_analyzer.cpython-38.pyc | Bin 4373 -> 0 bytes .../error_reporting.cpython-38.pyc | Bin 6367 -> 0 bytes .../punctuation_chars.cpython-38.pyc | Bin 2316 -> 0 bytes .../utils/__pycache__/roman.cpython-38.pyc | Bin 2809 -> 0 bytes .../__pycache__/smartquotes.cpython-38.pyc | Bin 29494 -> 0 bytes .../__pycache__/urischemes.cpython-38.pyc | Bin 5205 -> 0 bytes .../docutils/utils/code_analyzer.py | 142 - .../docutils/utils/error_reporting.py | 229 - .../docutils/utils/math/__init__.py | 48 - .../math/__pycache__/__init__.cpython-38.pyc | Bin 1453 -> 0 bytes .../__pycache__/latex2mathml.cpython-38.pyc | Bin 15236 -> 0 bytes .../math/__pycache__/math2html.cpython-38.pyc | Bin 195613 -> 0 bytes .../tex2mathml_extern.cpython-38.pyc | Bin 3344 -> 0 bytes .../__pycache__/tex2unichar.cpython-38.pyc | Bin 14152 -> 0 bytes .../__pycache__/unichar2tex.cpython-38.pyc | Bin 16724 -> 0 bytes .../docutils/utils/math/latex2mathml.py | 568 -- .../docutils/utils/math/math2html.py | 5383 ----------- .../docutils/utils/math/tex2mathml_extern.py | 148 - .../docutils/utils/math/tex2unichar.py | 662 -- .../docutils/utils/math/unichar2tex.py | 788 -- .../docutils/utils/punctuation_chars.py | 122 - .../site-packages/docutils/utils/roman.py | 82 - .../docutils/utils/smartquotes.py | 1014 -- .../docutils/utils/urischemes.py | 136 - .../docutils/writers/__init__.py | 143 - .../__pycache__/__init__.cpython-38.pyc | Bin 4062 -> 0 bytes .../__pycache__/_html_base.cpython-38.pyc | Bin 57667 -> 0 bytes .../__pycache__/docutils_xml.cpython-38.pyc | Bin 5717 -> 0 bytes .../__pycache__/manpage.cpython-38.pyc | Bin 41926 -> 0 bytes .../writers/__pycache__/null.cpython-38.pyc | Bin 620 -> 0 bytes .../__pycache__/pseudoxml.cpython-38.pyc | Bin 938 -> 0 bytes .../docutils/writers/_html_base.py | 1670 ---- .../docutils/writers/docutils_xml.py | 199 - .../docutils/writers/html4css1/__init__.py | 824 -- .../__pycache__/__init__.cpython-38.pyc | Bin 28855 -> 0 bytes .../docutils/writers/html4css1/html4css1.css | 349 - .../docutils/writers/html4css1/template.txt | 8 - .../writers/html5_polyglot/__init__.py | 219 - .../__pycache__/__init__.cpython-38.pyc | Bin 7539 -> 0 bytes .../docutils/writers/html5_polyglot/math.css | 276 - .../writers/html5_polyglot/minimal.css | 284 - .../docutils/writers/html5_polyglot/plain.css | 298 - .../writers/html5_polyglot/template.txt | 8 - .../docutils/writers/latex2e/__init__.py | 3216 ------- .../__pycache__/__init__.cpython-38.pyc | Bin 92079 -> 0 bytes .../docutils/writers/latex2e/default.tex | 14 - .../docutils/writers/latex2e/titlepage.tex | 20 - .../docutils/writers/latex2e/xelatex.tex | 21 - .../site-packages/docutils/writers/manpage.py | 1178 --- .../site-packages/docutils/writers/null.py | 21 - .../docutils/writers/odf_odt/__init__.py | 3534 ------- .../__pycache__/__init__.cpython-38.pyc | Bin 94266 -> 0 bytes .../pygmentsformatter.cpython-38.pyc | Bin 2822 -> 0 bytes .../writers/odf_odt/pygmentsformatter.py | 109 - .../docutils/writers/odf_odt/styles.odt | Bin 16500 -> 0 bytes .../docutils/writers/pep_html/__init__.py | 105 - .../__pycache__/__init__.cpython-38.pyc | Bin 3313 -> 0 bytes .../docutils/writers/pep_html/pep.css | 344 - .../docutils/writers/pep_html/template.txt | 29 - .../docutils/writers/pseudoxml.py | 31 - .../docutils/writers/s5_html/__init__.py | 353 - .../__pycache__/__init__.cpython-38.pyc | Bin 10518 -> 0 bytes .../writers/s5_html/themes/README.txt | 6 - .../writers/s5_html/themes/big-black/__base__ | 2 - .../s5_html/themes/big-black/framing.css | 25 - .../s5_html/themes/big-black/pretty.css | 109 - .../s5_html/themes/big-white/framing.css | 24 - .../s5_html/themes/big-white/pretty.css | 107 - .../writers/s5_html/themes/default/blank.gif | Bin 49 -> 0 bytes .../s5_html/themes/default/framing.css | 25 - .../s5_html/themes/default/iepngfix.htc | 42 - .../writers/s5_html/themes/default/opera.css | 8 - .../s5_html/themes/default/outline.css | 16 - .../writers/s5_html/themes/default/pretty.css | 120 - .../writers/s5_html/themes/default/print.css | 24 - .../s5_html/themes/default/s5-core.css | 11 - .../writers/s5_html/themes/default/slides.css | 10 - .../writers/s5_html/themes/default/slides.js | 558 -- .../s5_html/themes/medium-black/__base__ | 2 - .../s5_html/themes/medium-black/pretty.css | 115 - .../s5_html/themes/medium-white/framing.css | 24 - .../s5_html/themes/medium-white/pretty.css | 113 - .../s5_html/themes/small-black/__base__ | 2 - .../s5_html/themes/small-black/pretty.css | 116 - .../s5_html/themes/small-white/framing.css | 24 - .../s5_html/themes/small-white/pretty.css | 114 - .../docutils/writers/xetex/__init__.py | 150 - .../xetex/__pycache__/__init__.cpython-38.pyc | Bin 4128 -> 0 bytes .../python3.8/site-packages/easy_install.py | 5 - .../feedgenerator-1.9.1.dist-info/INSTALLER | 1 - .../feedgenerator-1.9.1.dist-info/LICENSE | 28 - .../feedgenerator-1.9.1.dist-info/METADATA | 49 - .../feedgenerator-1.9.1.dist-info/RECORD | 26 - .../feedgenerator-1.9.1.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../site-packages/feedgenerator/__init__.py | 24 - .../__pycache__/__init__.cpython-38.pyc | Bin 943 -> 0 bytes .../feedgenerator/django/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 156 -> 0 bytes .../feedgenerator/django/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-38.pyc | Bin 162 -> 0 bytes .../__pycache__/datetime_safe.cpython-38.pyc | Bin 2655 -> 0 bytes .../utils/__pycache__/encoding.cpython-38.pyc | Bin 7584 -> 0 bytes .../__pycache__/feedgenerator.cpython-38.pyc | Bin 13130 -> 0 bytes .../__pycache__/functional.cpython-38.pyc | Bin 13393 -> 0 bytes .../utils/__pycache__/six.cpython-38.pyc | Bin 10004 -> 0 bytes .../utils/__pycache__/timezone.cpython-38.pyc | Bin 7113 -> 0 bytes .../utils/__pycache__/xmlutils.cpython-38.pyc | Bin 1075 -> 0 bytes .../django/utils/datetime_safe.py | 89 - .../feedgenerator/django/utils/encoding.py | 256 - .../django/utils/feedgenerator.py | 404 - .../feedgenerator/django/utils/functional.py | 370 - .../feedgenerator/django/utils/six.py | 370 - .../feedgenerator/django/utils/timezone.py | 292 - .../feedgenerator/django/utils/xmlutils.py | 23 - .../site-packages/jinja2/__init__.py | 44 - .../__pycache__/__init__.cpython-38.pyc | Bin 1779 -> 0 bytes .../jinja2/__pycache__/_compat.cpython-38.pyc | Bin 3874 -> 0 bytes .../__pycache__/_identifier.cpython-38.pyc | Bin 1862 -> 0 bytes .../__pycache__/asyncfilters.cpython-38.pyc | Bin 4777 -> 0 bytes .../__pycache__/asyncsupport.cpython-38.pyc | Bin 8191 -> 0 bytes .../jinja2/__pycache__/bccache.cpython-38.pyc | Bin 12209 -> 0 bytes .../__pycache__/compiler.cpython-38.pyc | Bin 48293 -> 0 bytes .../__pycache__/constants.cpython-38.pyc | Bin 1506 -> 0 bytes .../jinja2/__pycache__/debug.cpython-38.pyc | Bin 5174 -> 0 bytes .../__pycache__/defaults.cpython-38.pyc | Bin 1082 -> 0 bytes .../__pycache__/environment.cpython-38.pyc | Bin 43966 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 5610 -> 0 bytes .../jinja2/__pycache__/ext.cpython-38.pyc | Bin 21474 -> 0 bytes .../jinja2/__pycache__/filters.cpython-38.pyc | Bin 39771 -> 0 bytes .../__pycache__/idtracking.cpython-38.pyc | Bin 9840 -> 0 bytes .../jinja2/__pycache__/lexer.cpython-38.pyc | Bin 19217 -> 0 bytes .../jinja2/__pycache__/loaders.cpython-38.pyc | Bin 18249 -> 0 bytes .../jinja2/__pycache__/meta.cpython-38.pyc | Bin 3458 -> 0 bytes .../__pycache__/nativetypes.cpython-38.pyc | Bin 4214 -> 0 bytes .../jinja2/__pycache__/nodes.cpython-38.pyc | Bin 35372 -> 0 bytes .../__pycache__/optimizer.cpython-38.pyc | Bin 1624 -> 0 bytes .../jinja2/__pycache__/parser.cpython-38.pyc | Bin 24941 -> 0 bytes .../jinja2/__pycache__/runtime.cpython-38.pyc | Bin 27609 -> 0 bytes .../jinja2/__pycache__/sandbox.cpython-38.pyc | Bin 14101 -> 0 bytes .../jinja2/__pycache__/tests.cpython-38.pyc | Bin 5339 -> 0 bytes .../jinja2/__pycache__/utils.cpython-38.pyc | Bin 22799 -> 0 bytes .../jinja2/__pycache__/visitor.cpython-38.pyc | Bin 3267 -> 0 bytes .../python3.8/site-packages/jinja2/_compat.py | 132 - .../site-packages/jinja2/_identifier.py | 6 - .../site-packages/jinja2/asyncfilters.py | 159 - .../site-packages/jinja2/asyncsupport.py | 264 - .../python3.8/site-packages/jinja2/bccache.py | 350 - .../site-packages/jinja2/compiler.py | 1843 ---- .../site-packages/jinja2/constants.py | 21 - .../python3.8/site-packages/jinja2/debug.py | 271 - .../site-packages/jinja2/defaults.py | 44 - .../site-packages/jinja2/environment.py | 1362 --- .../site-packages/jinja2/exceptions.py | 177 - .../lib/python3.8/site-packages/jinja2/ext.py | 704 -- .../python3.8/site-packages/jinja2/filters.py | 1382 --- .../site-packages/jinja2/idtracking.py | 290 - .../python3.8/site-packages/jinja2/lexer.py | 841 -- .../python3.8/site-packages/jinja2/loaders.py | 572 -- .../python3.8/site-packages/jinja2/meta.py | 101 - .../site-packages/jinja2/nativetypes.py | 111 - .../python3.8/site-packages/jinja2/nodes.py | 1088 --- .../site-packages/jinja2/optimizer.py | 41 - .../python3.8/site-packages/jinja2/parser.py | 939 -- .../python3.8/site-packages/jinja2/runtime.py | 1011 -- .../python3.8/site-packages/jinja2/sandbox.py | 510 - .../python3.8/site-packages/jinja2/tests.py | 215 - .../python3.8/site-packages/jinja2/utils.py | 727 -- .../python3.8/site-packages/jinja2/visitor.py | 81 - .../site-packages/markdown/__init__.py | 61 - .../site-packages/markdown/__main__.py | 151 - .../site-packages/markdown/__meta__.py | 55 - .../__pycache__/__init__.cpython-38.pyc | Bin 1848 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 4288 -> 0 bytes .../__pycache__/__meta__.cpython-38.pyc | Bin 1637 -> 0 bytes .../__pycache__/blockparser.cpython-38.pyc | Bin 4966 -> 0 bytes .../blockprocessors.cpython-38.pyc | Bin 16755 -> 0 bytes .../markdown/__pycache__/core.cpython-38.pyc | Bin 12243 -> 0 bytes .../__pycache__/inlinepatterns.cpython-38.pyc | Bin 25292 -> 0 bytes .../__pycache__/pep562.cpython-38.pyc | Bin 8164 -> 0 bytes .../__pycache__/postprocessors.cpython-38.pyc | Bin 4626 -> 0 bytes .../__pycache__/preprocessors.cpython-38.pyc | Bin 9806 -> 0 bytes .../__pycache__/serializers.cpython-38.pyc | Bin 3215 -> 0 bytes .../__pycache__/test_tools.cpython-38.pyc | Bin 6709 -> 0 bytes .../__pycache__/treeprocessors.cpython-38.pyc | Bin 11874 -> 0 bytes .../markdown/__pycache__/util.cpython-38.pyc | Bin 13642 -> 0 bytes .../site-packages/markdown/blockparser.py | 125 - .../site-packages/markdown/blockprocessors.py | 592 -- .../python3.8/site-packages/markdown/core.py | 408 - .../markdown/extensions/__init__.py | 104 - .../__pycache__/__init__.cpython-38.pyc | Bin 3957 -> 0 bytes .../__pycache__/abbr.cpython-38.pyc | Bin 3544 -> 0 bytes .../__pycache__/admonition.cpython-38.pyc | Bin 3003 -> 0 bytes .../__pycache__/attr_list.cpython-38.pyc | Bin 4695 -> 0 bytes .../__pycache__/codehilite.cpython-38.pyc | Bin 8079 -> 0 bytes .../__pycache__/def_list.cpython-38.pyc | Bin 3542 -> 0 bytes .../__pycache__/extra.cpython-38.pyc | Bin 2298 -> 0 bytes .../__pycache__/fenced_code.cpython-38.pyc | Bin 3526 -> 0 bytes .../__pycache__/footnotes.cpython-38.pyc | Bin 12157 -> 0 bytes .../__pycache__/legacy_attrs.cpython-38.pyc | Bin 3181 -> 0 bytes .../__pycache__/legacy_em.cpython-38.pyc | Bin 1884 -> 0 bytes .../__pycache__/md_in_html.cpython-38.pyc | Bin 3389 -> 0 bytes .../__pycache__/meta.cpython-38.pyc | Bin 2476 -> 0 bytes .../__pycache__/nl2br.cpython-38.pyc | Bin 1211 -> 0 bytes .../__pycache__/sane_lists.cpython-38.pyc | Bin 2194 -> 0 bytes .../__pycache__/smarty.cpython-38.pyc | Bin 8983 -> 0 bytes .../__pycache__/tables.cpython-38.pyc | Bin 5568 -> 0 bytes .../extensions/__pycache__/toc.cpython-38.pyc | Bin 9842 -> 0 bytes .../__pycache__/wikilinks.cpython-38.pyc | Bin 3212 -> 0 bytes .../site-packages/markdown/extensions/abbr.py | 94 - .../markdown/extensions/admonition.py | 94 - .../markdown/extensions/attr_list.py | 167 - .../markdown/extensions/codehilite.py | 270 - .../markdown/extensions/def_list.py | 109 - .../markdown/extensions/extra.py | 58 - .../markdown/extensions/fenced_code.py | 109 - .../markdown/extensions/footnotes.py | 418 - .../markdown/extensions/legacy_attrs.py | 67 - .../markdown/extensions/legacy_em.py | 49 - .../markdown/extensions/md_in_html.py | 100 - .../site-packages/markdown/extensions/meta.py | 79 - .../markdown/extensions/nl2br.py | 33 - .../markdown/extensions/sane_lists.py | 54 - .../markdown/extensions/smarty.py | 263 - .../markdown/extensions/tables.py | 223 - .../site-packages/markdown/extensions/toc.py | 355 - .../markdown/extensions/wikilinks.py | 87 - .../site-packages/markdown/inlinepatterns.py | 881 -- .../site-packages/markdown/pep562.py | 245 - .../site-packages/markdown/postprocessors.py | 117 - .../site-packages/markdown/preprocessors.py | 370 - .../site-packages/markdown/serializers.py | 189 - .../site-packages/markdown/test_tools.py | 180 - .../site-packages/markdown/treeprocessors.py | 435 - .../python3.8/site-packages/markdown/util.py | 456 - .../site-packages/markupsafe/__init__.py | 327 - .../__pycache__/__init__.cpython-38.pyc | Bin 10930 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 739 -> 0 bytes .../__pycache__/_constants.cpython-38.pyc | Bin 4235 -> 0 bytes .../__pycache__/_native.cpython-38.pyc | Bin 2113 -> 0 bytes .../site-packages/markupsafe/_compat.py | 33 - .../site-packages/markupsafe/_constants.py | 264 - .../site-packages/markupsafe/_native.py | 69 - .../site-packages/markupsafe/_speedups.c | 423 - .../_speedups.cpython-38-x86_64-linux-gnu.so | Bin 48016 -> 0 bytes .../pelican-4.2.0.dist-info/INSTALLER | 1 - .../pelican-4.2.0.dist-info/LICENSE | 661 -- .../pelican-4.2.0.dist-info/METADATA | 538 -- .../pelican-4.2.0.dist-info/RECORD | 119 - .../pelican-4.2.0.dist-info/WHEEL | 6 - .../pelican-4.2.0.dist-info/entry_points.txt | 6 - .../pelican-4.2.0.dist-info/top_level.txt | 1 - .../site-packages/pelican/__init__.py | 578 -- .../site-packages/pelican/__main__.py | 10 - .../__pycache__/__init__.cpython-38.pyc | Bin 15195 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 341 -> 0 bytes .../pelican/__pycache__/cache.cpython-38.pyc | Bin 5020 -> 0 bytes .../__pycache__/contents.cpython-38.pyc | Bin 16102 -> 0 bytes .../__pycache__/generators.cpython-38.pyc | Bin 28005 -> 0 bytes .../pelican/__pycache__/log.cpython-38.pyc | Bin 8519 -> 0 bytes .../__pycache__/paginator.cpython-38.pyc | Bin 4895 -> 0 bytes .../__pycache__/readers.cpython-38.pyc | Bin 23730 -> 0 bytes .../__pycache__/rstdirectives.cpython-38.pyc | Bin 2609 -> 0 bytes .../pelican/__pycache__/server.cpython-38.pyc | Bin 4567 -> 0 bytes .../__pycache__/settings.cpython-38.pyc | Bin 15853 -> 0 bytes .../__pycache__/signals.cpython-38.pyc | Bin 1327 -> 0 bytes .../__pycache__/urlwrappers.cpython-38.pyc | Bin 4344 -> 0 bytes .../pelican/__pycache__/utils.cpython-38.pyc | Bin 27956 -> 0 bytes .../__pycache__/writers.cpython-38.pyc | Bin 8118 -> 0 bytes .../python3.8/site-packages/pelican/cache.py | 141 - .../site-packages/pelican/contents.py | 615 -- .../site-packages/pelican/generators.py | 937 -- .../python3.8/site-packages/pelican/log.py | 269 - .../site-packages/pelican/paginator.py | 163 - .../site-packages/pelican/readers.py | 759 -- .../site-packages/pelican/rstdirectives.py | 95 - .../python3.8/site-packages/pelican/server.py | 143 - .../site-packages/pelican/settings.py | 668 -- .../site-packages/pelican/signals.py | 52 - .../themes/notmyidea/static/css/fonts.css | 12 - .../themes/notmyidea/static/css/main.css | 467 - .../themes/notmyidea/static/css/pygment.css | 205 - .../themes/notmyidea/static/css/reset.css | 52 - .../themes/notmyidea/static/css/typogrify.css | 3 - .../themes/notmyidea/static/css/wide.css | 48 - .../static/fonts/Yanone_Kaffeesatz_400.eot | Bin 20932 -> 0 bytes .../static/fonts/Yanone_Kaffeesatz_400.svg | 407 - .../static/fonts/Yanone_Kaffeesatz_400.ttf | Bin 39168 -> 0 bytes .../static/fonts/Yanone_Kaffeesatz_400.woff | Bin 22256 -> 0 bytes .../static/fonts/Yanone_Kaffeesatz_400.woff2 | Bin 18320 -> 0 bytes .../themes/notmyidea/static/fonts/font.css | 12 - .../notmyidea/static/images/icons/aboutme.png | Bin 411 -> 0 bytes .../static/images/icons/bitbucket.png | Bin 3178 -> 0 bytes .../static/images/icons/delicious.png | Bin 827 -> 0 bytes .../static/images/icons/facebook.png | Bin 150 -> 0 bytes .../notmyidea/static/images/icons/github.png | Bin 606 -> 0 bytes .../static/images/icons/gitorious.png | Bin 223 -> 0 bytes .../notmyidea/static/images/icons/gittip.png | Bin 402 -> 0 bytes .../static/images/icons/google-groups.png | Bin 420 -> 0 bytes .../static/images/icons/google-plus.png | Bin 511 -> 0 bytes .../static/images/icons/hackernews.png | Bin 2771 -> 0 bytes .../notmyidea/static/images/icons/lastfm.png | Bin 840 -> 0 bytes .../static/images/icons/linkedin.png | Bin 625 -> 0 bytes .../notmyidea/static/images/icons/reddit.png | Bin 458 -> 0 bytes .../notmyidea/static/images/icons/rss.png | Bin 751 -> 0 bytes .../static/images/icons/slideshare.png | Bin 435 -> 0 bytes .../static/images/icons/speakerdeck.png | Bin 580 -> 0 bytes .../static/images/icons/stackoverflow.png | Bin 414 -> 0 bytes .../notmyidea/static/images/icons/twitter.png | Bin 416 -> 0 bytes .../notmyidea/static/images/icons/vimeo.png | Bin 349 -> 0 bytes .../notmyidea/static/images/icons/youtube.png | Bin 316 -> 0 bytes .../themes/notmyidea/templates/analytics.html | 45 - .../themes/notmyidea/templates/archives.html | 13 - .../themes/notmyidea/templates/article.html | 46 - .../notmyidea/templates/article_infos.html | 23 - .../themes/notmyidea/templates/author.html | 2 - .../themes/notmyidea/templates/authors.html | 16 - .../themes/notmyidea/templates/base.html | 79 - .../themes/notmyidea/templates/category.html | 2 - .../themes/notmyidea/templates/comments.html | 1 - .../notmyidea/templates/disqus_script.html | 11 - .../themes/notmyidea/templates/github.html | 9 - .../themes/notmyidea/templates/index.html | 59 - .../themes/notmyidea/templates/page.html | 19 - .../notmyidea/templates/period_archives.html | 13 - .../themes/notmyidea/templates/tag.html | 2 - .../themes/notmyidea/templates/taglist.html | 1 - .../themes/notmyidea/templates/tags.html | 16 - .../notmyidea/templates/translations.html | 16 - .../themes/notmyidea/templates/twitter.html | 3 - .../site-packages/pelican/tools/__init__.py | 0 .../tools/__pycache__/__init__.cpython-38.pyc | Bin 149 -> 0 bytes .../__pycache__/pelican_import.cpython-38.pyc | Bin 24438 -> 0 bytes .../pelican_quickstart.cpython-38.pyc | Bin 8917 -> 0 bytes .../__pycache__/pelican_themes.cpython-38.pyc | Bin 6415 -> 0 bytes .../pelican/tools/pelican_import.py | 1026 --- .../pelican/tools/pelican_quickstart.py | 379 - .../pelican/tools/pelican_themes.py | 261 - .../pelican/tools/templates/Makefile.jinja2 | 163 - .../tools/templates/pelicanconf.py.jinja2 | 35 - .../tools/templates/publishconf.py.jinja2 | 25 - .../pelican/tools/templates/tasks.py.jinja2 | 148 - .../site-packages/pelican/urlwrappers.py | 133 - .../python3.8/site-packages/pelican/utils.py | 921 -- .../site-packages/pelican/writers.py | 278 - .../pip-20.0.2.dist-info/INSTALLER | 1 - .../pip-20.0.2.dist-info/LICENSE.txt | 20 - .../pip-20.0.2.dist-info/METADATA | 84 - .../site-packages/pip-20.0.2.dist-info/RECORD | 704 -- .../site-packages/pip-20.0.2.dist-info/WHEEL | 6 - .../pip-20.0.2.dist-info/entry_points.txt | 5 - .../pip-20.0.2.dist-info/top_level.txt | 1 - .../python3.8/site-packages/pip/__init__.py | 18 - .../python3.8/site-packages/pip/__main__.py | 19 - .../pip/__pycache__/__init__.cpython-38.pyc | Bin 626 -> 0 bytes .../pip/__pycache__/__main__.cpython-38.pyc | Bin 419 -> 0 bytes .../site-packages/pip/_internal/__init__.py | 18 - .../__pycache__/__init__.cpython-38.pyc | Bin 675 -> 0 bytes .../__pycache__/build_env.cpython-38.pyc | Bin 7480 -> 0 bytes .../__pycache__/cache.cpython-38.pyc | Bin 8697 -> 0 bytes .../__pycache__/configuration.cpython-38.pyc | Bin 10642 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 12479 -> 0 bytes .../__pycache__/legacy_resolve.cpython-38.pyc | Bin 9895 -> 0 bytes .../__pycache__/locations.cpython-38.pyc | Bin 4489 -> 0 bytes .../_internal/__pycache__/main.cpython-38.pyc | Bin 612 -> 0 bytes .../__pycache__/pep425tags.cpython-38.pyc | Bin 3581 -> 0 bytes .../__pycache__/pyproject.cpython-38.pyc | Bin 3731 -> 0 bytes .../self_outdated_check.cpython-38.pyc | Bin 5490 -> 0 bytes .../__pycache__/wheel_builder.cpython-38.pyc | Bin 6696 -> 0 bytes .../site-packages/pip/_internal/build_env.py | 221 - .../site-packages/pip/_internal/cache.py | 329 - .../pip/_internal/cli/__init__.py | 4 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 233 -> 0 bytes .../__pycache__/autocompletion.cpython-38.pyc | Bin 4950 -> 0 bytes .../__pycache__/base_command.cpython-38.pyc | Bin 5844 -> 0 bytes .../cli/__pycache__/cmdoptions.cpython-38.pyc | Bin 20325 -> 0 bytes .../command_context.cpython-38.pyc | Bin 1308 -> 0 bytes .../cli/__pycache__/main.cpython-38.pyc | Bin 1403 -> 0 bytes .../__pycache__/main_parser.cpython-38.pyc | Bin 2156 -> 0 bytes .../cli/__pycache__/parser.cpython-38.pyc | Bin 8974 -> 0 bytes .../__pycache__/req_command.cpython-38.pyc | Bin 8286 -> 0 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 362 -> 0 bytes .../pip/_internal/cli/autocompletion.py | 164 - .../pip/_internal/cli/base_command.py | 226 - .../pip/_internal/cli/cmdoptions.py | 957 -- .../pip/_internal/cli/command_context.py | 36 - .../site-packages/pip/_internal/cli/main.py | 75 - .../pip/_internal/cli/main_parser.py | 99 - .../site-packages/pip/_internal/cli/parser.py | 265 - .../pip/_internal/cli/req_command.py | 333 - .../pip/_internal/cli/status_codes.py | 8 - .../pip/_internal/commands/__init__.py | 114 - .../__pycache__/__init__.cpython-38.pyc | Bin 2849 -> 0 bytes .../commands/__pycache__/check.cpython-38.pyc | Bin 1309 -> 0 bytes .../__pycache__/completion.cpython-38.pyc | Bin 3010 -> 0 bytes .../__pycache__/configuration.cpython-38.pyc | Bin 6572 -> 0 bytes .../commands/__pycache__/debug.cpython-38.pyc | Bin 4086 -> 0 bytes .../__pycache__/download.cpython-38.pyc | Bin 3918 -> 0 bytes .../__pycache__/freeze.cpython-38.pyc | Bin 2909 -> 0 bytes .../commands/__pycache__/hash.cpython-38.pyc | Bin 1987 -> 0 bytes .../commands/__pycache__/help.cpython-38.pyc | Bin 1183 -> 0 bytes .../__pycache__/install.cpython-38.pyc | Bin 16180 -> 0 bytes .../commands/__pycache__/list.cpython-38.pyc | Bin 8938 -> 0 bytes .../__pycache__/search.cpython-38.pyc | Bin 4481 -> 0 bytes .../commands/__pycache__/show.cpython-38.pyc | Bin 6322 -> 0 bytes .../__pycache__/uninstall.cpython-38.pyc | Bin 2691 -> 0 bytes .../commands/__pycache__/wheel.cpython-38.pyc | Bin 5243 -> 0 bytes .../pip/_internal/commands/check.py | 45 - .../pip/_internal/commands/completion.py | 96 - .../pip/_internal/commands/configuration.py | 233 - .../pip/_internal/commands/debug.py | 142 - .../pip/_internal/commands/download.py | 147 - .../pip/_internal/commands/freeze.py | 103 - .../pip/_internal/commands/hash.py | 58 - .../pip/_internal/commands/help.py | 41 - .../pip/_internal/commands/install.py | 701 -- .../pip/_internal/commands/list.py | 313 - .../pip/_internal/commands/search.py | 145 - .../pip/_internal/commands/show.py | 180 - .../pip/_internal/commands/uninstall.py | 82 - .../pip/_internal/commands/wheel.py | 197 - .../pip/_internal/configuration.py | 422 - .../pip/_internal/distributions/__init__.py | 24 - .../__pycache__/__init__.cpython-38.pyc | Bin 809 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 1925 -> 0 bytes .../__pycache__/installed.cpython-38.pyc | Bin 1205 -> 0 bytes .../__pycache__/sdist.cpython-38.pyc | Bin 3468 -> 0 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 1557 -> 0 bytes .../pip/_internal/distributions/base.py | 45 - .../pip/_internal/distributions/installed.py | 24 - .../pip/_internal/distributions/sdist.py | 104 - .../pip/_internal/distributions/wheel.py | 36 - .../site-packages/pip/_internal/exceptions.py | 308 - .../pip/_internal/index/__init__.py | 2 - .../index/__pycache__/__init__.cpython-38.pyc | Bin 187 -> 0 bytes .../__pycache__/collector.cpython-38.pyc | Bin 14153 -> 0 bytes .../__pycache__/package_finder.cpython-38.pyc | Bin 25746 -> 0 bytes .../pip/_internal/index/collector.py | 544 -- .../pip/_internal/index/package_finder.py | 1013 -- .../pip/_internal/legacy_resolve.py | 430 - .../site-packages/pip/_internal/locations.py | 194 - .../site-packages/pip/_internal/main.py | 16 - .../pip/_internal/models/__init__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 221 -> 0 bytes .../__pycache__/candidate.cpython-38.pyc | Bin 1418 -> 0 bytes .../__pycache__/format_control.cpython-38.pyc | Bin 2413 -> 0 bytes .../models/__pycache__/index.cpython-38.pyc | Bin 1143 -> 0 bytes .../models/__pycache__/link.cpython-38.pyc | Bin 6656 -> 0 bytes .../models/__pycache__/scheme.cpython-38.pyc | Bin 859 -> 0 bytes .../__pycache__/search_scope.cpython-38.pyc | Bin 3250 -> 0 bytes .../selection_prefs.cpython-38.pyc | Bin 1593 -> 0 bytes .../__pycache__/target_python.cpython-38.pyc | Bin 3216 -> 0 bytes .../models/__pycache__/wheel.cpython-38.pyc | Bin 3179 -> 0 bytes .../pip/_internal/models/candidate.py | 36 - .../pip/_internal/models/format_control.py | 84 - .../pip/_internal/models/index.py | 31 - .../pip/_internal/models/link.py | 227 - .../pip/_internal/models/scheme.py | 25 - .../pip/_internal/models/search_scope.py | 114 - .../pip/_internal/models/selection_prefs.py | 47 - .../pip/_internal/models/target_python.py | 107 - .../pip/_internal/models/wheel.py | 78 - .../pip/_internal/network/__init__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 209 -> 0 bytes .../network/__pycache__/auth.cpython-38.pyc | Bin 6975 -> 0 bytes .../network/__pycache__/cache.cpython-38.pyc | Bin 2688 -> 0 bytes .../__pycache__/download.cpython-38.pyc | Bin 4367 -> 0 bytes .../__pycache__/session.cpython-38.pyc | Bin 8848 -> 0 bytes .../network/__pycache__/utils.cpython-38.pyc | Bin 703 -> 0 bytes .../network/__pycache__/xmlrpc.cpython-38.pyc | Bin 1571 -> 0 bytes .../pip/_internal/network/auth.py | 298 - .../pip/_internal/network/cache.py | 81 - .../pip/_internal/network/download.py | 200 - .../pip/_internal/network/session.py | 405 - .../pip/_internal/network/utils.py | 48 - .../pip/_internal/network/xmlrpc.py | 44 - .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 157 -> 0 bytes .../__pycache__/check.cpython-38.pyc | Bin 3653 -> 0 bytes .../__pycache__/freeze.cpython-38.pyc | Bin 5800 -> 0 bytes .../__pycache__/prepare.cpython-38.pyc | Bin 11159 -> 0 bytes .../_internal/operations/build/__init__.py | 0 .../build/__pycache__/__init__.cpython-38.pyc | Bin 163 -> 0 bytes .../build/__pycache__/metadata.cpython-38.pyc | Bin 1205 -> 0 bytes .../metadata_legacy.cpython-38.pyc | Bin 3265 -> 0 bytes .../build/__pycache__/wheel.cpython-38.pyc | Bin 1303 -> 0 bytes .../__pycache__/wheel_legacy.cpython-38.pyc | Bin 2564 -> 0 bytes .../_internal/operations/build/metadata.py | 40 - .../operations/build/metadata_legacy.py | 122 - .../pip/_internal/operations/build/wheel.py | 46 - .../operations/build/wheel_legacy.py | 115 - .../pip/_internal/operations/check.py | 163 - .../pip/_internal/operations/freeze.py | 265 - .../_internal/operations/install/__init__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 221 -> 0 bytes .../editable_legacy.cpython-38.pyc | Bin 1299 -> 0 bytes .../install/__pycache__/legacy.cpython-38.pyc | Bin 3043 -> 0 bytes .../install/__pycache__/wheel.cpython-38.pyc | Bin 14579 -> 0 bytes .../operations/install/editable_legacy.py | 52 - .../_internal/operations/install/legacy.py | 129 - .../pip/_internal/operations/install/wheel.py | 615 -- .../pip/_internal/operations/prepare.py | 591 -- .../site-packages/pip/_internal/pep425tags.py | 167 - .../site-packages/pip/_internal/pyproject.py | 196 - .../pip/_internal/req/__init__.py | 92 - .../req/__pycache__/__init__.cpython-38.pyc | Bin 2191 -> 0 bytes .../__pycache__/constructors.cpython-38.pyc | Bin 10360 -> 0 bytes .../req/__pycache__/req_file.cpython-38.pyc | Bin 12699 -> 0 bytes .../__pycache__/req_install.cpython-38.pyc | Bin 21335 -> 0 bytes .../req/__pycache__/req_set.cpython-38.pyc | Bin 6018 -> 0 bytes .../__pycache__/req_tracker.cpython-38.pyc | Bin 4038 -> 0 bytes .../__pycache__/req_uninstall.cpython-38.pyc | Bin 17424 -> 0 bytes .../pip/_internal/req/constructors.py | 436 - .../pip/_internal/req/req_file.py | 546 -- .../pip/_internal/req/req_install.py | 830 -- .../pip/_internal/req/req_set.py | 209 - .../pip/_internal/req/req_tracker.py | 150 - .../pip/_internal/req/req_uninstall.py | 644 -- .../pip/_internal/self_outdated_check.py | 242 - .../pip/_internal/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-38.pyc | Bin 152 -> 0 bytes .../utils/__pycache__/appdirs.cpython-38.pyc | Bin 1336 -> 0 bytes .../utils/__pycache__/compat.cpython-38.pyc | Bin 6117 -> 0 bytes .../__pycache__/deprecation.cpython-38.pyc | Bin 2823 -> 0 bytes .../__pycache__/distutils_args.cpython-38.pyc | Bin 1136 -> 0 bytes .../utils/__pycache__/encoding.cpython-38.pyc | Bin 1244 -> 0 bytes .../__pycache__/entrypoints.cpython-38.pyc | Bin 1296 -> 0 bytes .../__pycache__/filesystem.cpython-38.pyc | Bin 4032 -> 0 bytes .../__pycache__/filetypes.cpython-38.pyc | Bin 553 -> 0 bytes .../utils/__pycache__/glibc.cpython-38.pyc | Bin 1705 -> 0 bytes .../utils/__pycache__/hashes.cpython-38.pyc | Bin 4141 -> 0 bytes .../inject_securetransport.cpython-38.pyc | Bin 929 -> 0 bytes .../utils/__pycache__/logging.cpython-38.pyc | Bin 9156 -> 0 bytes .../__pycache__/marker_files.cpython-38.pyc | Bin 925 -> 0 bytes .../utils/__pycache__/misc.cpython-38.pyc | Bin 23226 -> 0 bytes .../utils/__pycache__/models.cpython-38.pyc | Bin 1921 -> 0 bytes .../__pycache__/packaging.cpython-38.pyc | Bin 2605 -> 0 bytes .../__pycache__/pkg_resources.cpython-38.pyc | Bin 1819 -> 0 bytes .../setuptools_build.cpython-38.pyc | Bin 2924 -> 0 bytes .../__pycache__/subprocess.cpython-38.pyc | Bin 5595 -> 0 bytes .../utils/__pycache__/temp_dir.cpython-38.pyc | Bin 6708 -> 0 bytes .../utils/__pycache__/typing.cpython-38.pyc | Bin 1434 -> 0 bytes .../utils/__pycache__/ui.cpython-38.pyc | Bin 11799 -> 0 bytes .../__pycache__/unpacking.cpython-38.pyc | Bin 6072 -> 0 bytes .../utils/__pycache__/urls.cpython-38.pyc | Bin 1462 -> 0 bytes .../__pycache__/virtualenv.cpython-38.pyc | Bin 3277 -> 0 bytes .../utils/__pycache__/wheel.cpython-38.pyc | Bin 6322 -> 0 bytes .../pip/_internal/utils/appdirs.py | 41 - .../pip/_internal/utils/compat.py | 269 - .../pip/_internal/utils/deprecation.py | 104 - .../pip/_internal/utils/distutils_args.py | 48 - .../pip/_internal/utils/encoding.py | 42 - .../pip/_internal/utils/entrypoints.py | 31 - .../pip/_internal/utils/filesystem.py | 171 - .../pip/_internal/utils/filetypes.py | 16 - .../pip/_internal/utils/glibc.py | 98 - .../pip/_internal/utils/hashes.py | 131 - .../_internal/utils/inject_securetransport.py | 36 - .../pip/_internal/utils/logging.py | 398 - .../pip/_internal/utils/marker_files.py | 25 - .../site-packages/pip/_internal/utils/misc.py | 886 -- .../pip/_internal/utils/models.py | 42 - .../pip/_internal/utils/packaging.py | 94 - .../pip/_internal/utils/pkg_resources.py | 44 - .../pip/_internal/utils/setuptools_build.py | 181 - .../pip/_internal/utils/subprocess.py | 278 - .../pip/_internal/utils/temp_dir.py | 250 - .../pip/_internal/utils/typing.py | 38 - .../site-packages/pip/_internal/utils/ui.py | 428 - .../pip/_internal/utils/unpacking.py | 272 - .../site-packages/pip/_internal/utils/urls.py | 54 - .../pip/_internal/utils/virtualenv.py | 115 - .../pip/_internal/utils/wheel.py | 225 - .../pip/_internal/vcs/__init__.py | 15 - .../vcs/__pycache__/__init__.cpython-38.pyc | Bin 445 -> 0 bytes .../vcs/__pycache__/bazaar.cpython-38.pyc | Bin 3744 -> 0 bytes .../vcs/__pycache__/git.cpython-38.pyc | Bin 9495 -> 0 bytes .../vcs/__pycache__/mercurial.cpython-38.pyc | Bin 4885 -> 0 bytes .../vcs/__pycache__/subversion.cpython-38.pyc | Bin 8484 -> 0 bytes .../__pycache__/versioncontrol.cpython-38.pyc | Bin 19213 -> 0 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 120 - .../site-packages/pip/_internal/vcs/git.py | 389 - .../pip/_internal/vcs/mercurial.py | 155 - .../pip/_internal/vcs/subversion.py | 333 - .../pip/_internal/vcs/versioncontrol.py | 700 -- .../pip/_internal/wheel_builder.py | 305 - .../site-packages/pip/_vendor/__init__.py | 109 - .../__pycache__/__init__.cpython-38.pyc | Bin 2826 -> 0 bytes .../__pycache__/appdirs.cpython-38.pyc | Bin 21373 -> 0 bytes .../__pycache__/contextlib2.cpython-38.pyc | Bin 15487 -> 0 bytes .../_vendor/__pycache__/distro.cpython-38.pyc | Bin 36538 -> 0 bytes .../__pycache__/ipaddress.cpython-38.pyc | Bin 64785 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 240338 -> 0 bytes .../__pycache__/retrying.cpython-38.pyc | Bin 8003 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 26861 -> 0 bytes .../site-packages/pip/_vendor/appdirs.py | 639 -- .../pip/_vendor/cachecontrol/__init__.py | 11 - .../__pycache__/__init__.cpython-38.pyc | Bin 510 -> 0 bytes .../__pycache__/_cmd.cpython-38.pyc | Bin 1537 -> 0 bytes .../__pycache__/adapter.cpython-38.pyc | Bin 3044 -> 0 bytes .../__pycache__/cache.cpython-38.pyc | Bin 1743 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 717 -> 0 bytes .../__pycache__/controller.cpython-38.pyc | Bin 7748 -> 0 bytes .../__pycache__/filewrapper.cpython-38.pyc | Bin 2136 -> 0 bytes .../__pycache__/heuristics.cpython-38.pyc | Bin 4695 -> 0 bytes .../__pycache__/serialize.cpython-38.pyc | Bin 4197 -> 0 bytes .../__pycache__/wrapper.cpython-38.pyc | Bin 634 -> 0 bytes .../pip/_vendor/cachecontrol/_cmd.py | 57 - .../pip/_vendor/cachecontrol/adapter.py | 133 - .../pip/_vendor/cachecontrol/cache.py | 39 - .../_vendor/cachecontrol/caches/__init__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 254 -> 0 bytes .../__pycache__/file_cache.cpython-38.pyc | Bin 3228 -> 0 bytes .../__pycache__/redis_cache.cpython-38.pyc | Bin 1526 -> 0 bytes .../_vendor/cachecontrol/caches/file_cache.py | 146 - .../cachecontrol/caches/redis_cache.py | 33 - .../pip/_vendor/cachecontrol/compat.py | 29 - .../pip/_vendor/cachecontrol/controller.py | 376 - .../pip/_vendor/cachecontrol/filewrapper.py | 80 - .../pip/_vendor/cachecontrol/heuristics.py | 135 - .../pip/_vendor/cachecontrol/serialize.py | 188 - .../pip/_vendor/cachecontrol/wrapper.py | 29 - .../pip/_vendor/certifi/__init__.py | 3 - .../pip/_vendor/certifi/__main__.py | 2 - .../__pycache__/__init__.cpython-38.pyc | Bin 217 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 220 -> 0 bytes .../certifi/__pycache__/core.cpython-38.pyc | Bin 433 -> 0 bytes .../pip/_vendor/certifi/cacert.pem | 4602 --------- .../site-packages/pip/_vendor/certifi/core.py | 15 - .../pip/_vendor/chardet/__init__.py | 39 - .../__pycache__/__init__.cpython-38.pyc | Bin 810 -> 0 bytes .../__pycache__/big5freq.cpython-38.pyc | Bin 27139 -> 0 bytes .../__pycache__/big5prober.cpython-38.pyc | Bin 1094 -> 0 bytes .../chardistribution.cpython-38.pyc | Bin 6180 -> 0 bytes .../charsetgroupprober.cpython-38.pyc | Bin 2211 -> 0 bytes .../__pycache__/charsetprober.cpython-38.pyc | Bin 3443 -> 0 bytes .../codingstatemachine.cpython-38.pyc | Bin 2870 -> 0 bytes .../chardet/__pycache__/compat.cpython-38.pyc | Bin 315 -> 0 bytes .../__pycache__/cp949prober.cpython-38.pyc | Bin 1101 -> 0 bytes .../chardet/__pycache__/enums.cpython-38.pyc | Bin 2608 -> 0 bytes .../__pycache__/escprober.cpython-38.pyc | Bin 2593 -> 0 bytes .../chardet/__pycache__/escsm.cpython-38.pyc | Bin 7434 -> 0 bytes .../__pycache__/eucjpprober.cpython-38.pyc | Bin 2411 -> 0 bytes .../__pycache__/euckrfreq.cpython-38.pyc | Bin 12023 -> 0 bytes .../__pycache__/euckrprober.cpython-38.pyc | Bin 1102 -> 0 bytes .../__pycache__/euctwfreq.cpython-38.pyc | Bin 27143 -> 0 bytes .../__pycache__/euctwprober.cpython-38.pyc | Bin 1102 -> 0 bytes .../__pycache__/gb2312freq.cpython-38.pyc | Bin 19067 -> 0 bytes .../__pycache__/gb2312prober.cpython-38.pyc | Bin 1110 -> 0 bytes .../__pycache__/hebrewprober.cpython-38.pyc | Bin 2983 -> 0 bytes .../__pycache__/jisfreq.cpython-38.pyc | Bin 22095 -> 0 bytes .../chardet/__pycache__/jpcntx.cpython-38.pyc | Bin 37568 -> 0 bytes .../langbulgarianmodel.cpython-38.pyc | Bin 23592 -> 0 bytes .../langcyrillicmodel.cpython-38.pyc | Bin 29056 -> 0 bytes .../__pycache__/langgreekmodel.cpython-38.pyc | Bin 23550 -> 0 bytes .../langhebrewmodel.cpython-38.pyc | Bin 22177 -> 0 bytes .../langhungarianmodel.cpython-38.pyc | Bin 23581 -> 0 bytes .../__pycache__/langthaimodel.cpython-38.pyc | Bin 22156 -> 0 bytes .../langturkishmodel.cpython-38.pyc | Bin 22179 -> 0 bytes .../__pycache__/latin1prober.cpython-38.pyc | Bin 3363 -> 0 bytes .../mbcharsetprober.cpython-38.pyc | Bin 2226 -> 0 bytes .../mbcsgroupprober.cpython-38.pyc | Bin 1091 -> 0 bytes .../chardet/__pycache__/mbcssm.cpython-38.pyc | Bin 16714 -> 0 bytes .../sbcharsetprober.cpython-38.pyc | Bin 2979 -> 0 bytes .../sbcsgroupprober.cpython-38.pyc | Bin 1589 -> 0 bytes .../__pycache__/sjisprober.cpython-38.pyc | Bin 2447 -> 0 bytes .../universaldetector.cpython-38.pyc | Bin 5791 -> 0 bytes .../__pycache__/utf8prober.cpython-38.pyc | Bin 1952 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 399 -> 0 bytes .../pip/_vendor/chardet/big5freq.py | 386 - .../pip/_vendor/chardet/big5prober.py | 47 - .../pip/_vendor/chardet/chardistribution.py | 233 - .../pip/_vendor/chardet/charsetgroupprober.py | 106 - .../pip/_vendor/chardet/charsetprober.py | 145 - .../pip/_vendor/chardet/cli/__init__.py | 1 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 156 -> 0 bytes .../cli/__pycache__/chardetect.cpython-38.pyc | Bin 2657 -> 0 bytes .../pip/_vendor/chardet/cli/chardetect.py | 85 - .../pip/_vendor/chardet/codingstatemachine.py | 88 - .../pip/_vendor/chardet/compat.py | 34 - .../pip/_vendor/chardet/cp949prober.py | 49 - .../pip/_vendor/chardet/enums.py | 76 - .../pip/_vendor/chardet/escprober.py | 101 - .../pip/_vendor/chardet/escsm.py | 246 - .../pip/_vendor/chardet/eucjpprober.py | 92 - .../pip/_vendor/chardet/euckrfreq.py | 195 - .../pip/_vendor/chardet/euckrprober.py | 47 - .../pip/_vendor/chardet/euctwfreq.py | 387 - .../pip/_vendor/chardet/euctwprober.py | 46 - .../pip/_vendor/chardet/gb2312freq.py | 283 - .../pip/_vendor/chardet/gb2312prober.py | 46 - .../pip/_vendor/chardet/hebrewprober.py | 292 - .../pip/_vendor/chardet/jisfreq.py | 325 - .../pip/_vendor/chardet/jpcntx.py | 233 - .../pip/_vendor/chardet/langbulgarianmodel.py | 228 - .../pip/_vendor/chardet/langcyrillicmodel.py | 333 - .../pip/_vendor/chardet/langgreekmodel.py | 225 - .../pip/_vendor/chardet/langhebrewmodel.py | 200 - .../pip/_vendor/chardet/langhungarianmodel.py | 225 - .../pip/_vendor/chardet/langthaimodel.py | 199 - .../pip/_vendor/chardet/langturkishmodel.py | 193 - .../pip/_vendor/chardet/latin1prober.py | 145 - .../pip/_vendor/chardet/mbcharsetprober.py | 91 - .../pip/_vendor/chardet/mbcsgroupprober.py | 54 - .../pip/_vendor/chardet/mbcssm.py | 572 -- .../pip/_vendor/chardet/sbcharsetprober.py | 132 - .../pip/_vendor/chardet/sbcsgroupprober.py | 73 - .../pip/_vendor/chardet/sjisprober.py | 92 - .../pip/_vendor/chardet/universaldetector.py | 286 - .../pip/_vendor/chardet/utf8prober.py | 82 - .../pip/_vendor/chardet/version.py | 9 - .../pip/_vendor/colorama/__init__.py | 6 - .../__pycache__/__init__.cpython-38.pyc | Bin 404 -> 0 bytes .../colorama/__pycache__/ansi.cpython-38.pyc | Bin 3189 -> 0 bytes .../__pycache__/ansitowin32.cpython-38.pyc | Bin 7698 -> 0 bytes .../__pycache__/initialise.cpython-38.pyc | Bin 1665 -> 0 bytes .../colorama/__pycache__/win32.cpython-38.pyc | Bin 3941 -> 0 bytes .../__pycache__/winterm.cpython-38.pyc | Bin 4625 -> 0 bytes .../pip/_vendor/colorama/ansi.py | 102 - .../pip/_vendor/colorama/ansitowin32.py | 257 - .../pip/_vendor/colorama/initialise.py | 80 - .../pip/_vendor/colorama/win32.py | 152 - .../pip/_vendor/colorama/winterm.py | 169 - .../site-packages/pip/_vendor/contextlib2.py | 518 -- .../pip/_vendor/distlib/__init__.py | 23 - .../__pycache__/__init__.cpython-38.pyc | Bin 1019 -> 0 bytes .../distlib/__pycache__/compat.cpython-38.pyc | Bin 32168 -> 0 bytes .../__pycache__/database.cpython-38.pyc | Bin 42081 -> 0 bytes .../distlib/__pycache__/index.cpython-38.pyc | Bin 17372 -> 0 bytes .../__pycache__/locators.cpython-38.pyc | Bin 38374 -> 0 bytes .../__pycache__/manifest.cpython-38.pyc | Bin 10194 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 4458 -> 0 bytes .../__pycache__/metadata.cpython-38.pyc | Bin 26605 -> 0 bytes .../__pycache__/resources.cpython-38.pyc | Bin 10969 -> 0 bytes .../__pycache__/scripts.cpython-38.pyc | Bin 10834 -> 0 bytes .../distlib/__pycache__/util.cpython-38.pyc | Bin 48122 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 20328 -> 0 bytes .../distlib/__pycache__/wheel.cpython-38.pyc | Bin 25526 -> 0 bytes .../pip/_vendor/distlib/_backport/__init__.py | 6 - .../__pycache__/__init__.cpython-38.pyc | Bin 444 -> 0 bytes .../_backport/__pycache__/misc.cpython-38.pyc | Bin 1055 -> 0 bytes .../__pycache__/shutil.cpython-38.pyc | Bin 21448 -> 0 bytes .../__pycache__/sysconfig.cpython-38.pyc | Bin 15875 -> 0 bytes .../__pycache__/tarfile.cpython-38.pyc | Bin 62704 -> 0 bytes .../pip/_vendor/distlib/_backport/misc.py | 41 - .../pip/_vendor/distlib/_backport/shutil.py | 761 -- .../_vendor/distlib/_backport/sysconfig.cfg | 84 - .../_vendor/distlib/_backport/sysconfig.py | 786 -- .../pip/_vendor/distlib/_backport/tarfile.py | 2607 ------ .../pip/_vendor/distlib/compat.py | 1120 --- .../pip/_vendor/distlib/database.py | 1339 --- .../pip/_vendor/distlib/index.py | 516 -- .../pip/_vendor/distlib/locators.py | 1302 --- .../pip/_vendor/distlib/manifest.py | 393 - .../pip/_vendor/distlib/markers.py | 131 - .../pip/_vendor/distlib/metadata.py | 1096 --- .../pip/_vendor/distlib/resources.py | 355 - .../pip/_vendor/distlib/scripts.py | 416 - .../site-packages/pip/_vendor/distlib/t32.exe | Bin 96768 -> 0 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 105984 -> 0 bytes .../site-packages/pip/_vendor/distlib/util.py | 1761 ---- .../pip/_vendor/distlib/version.py | 736 -- .../site-packages/pip/_vendor/distlib/w32.exe | Bin 90112 -> 0 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 99840 -> 0 bytes .../pip/_vendor/distlib/wheel.py | 1004 -- .../site-packages/pip/_vendor/distro.py | 1216 --- .../pip/_vendor/html5lib/__init__.py | 35 - .../__pycache__/__init__.cpython-38.pyc | Bin 1277 -> 0 bytes .../__pycache__/_ihatexml.cpython-38.pyc | Bin 13749 -> 0 bytes .../__pycache__/_inputstream.cpython-38.pyc | Bin 21901 -> 0 bytes .../__pycache__/_tokenizer.cpython-38.pyc | Bin 39619 -> 0 bytes .../__pycache__/_utils.cpython-38.pyc | Bin 3307 -> 0 bytes .../__pycache__/constants.cpython-38.pyc | Bin 66314 -> 0 bytes .../__pycache__/html5parser.cpython-38.pyc | Bin 95136 -> 0 bytes .../__pycache__/serializer.cpython-38.pyc | Bin 10785 -> 0 bytes .../pip/_vendor/html5lib/_ihatexml.py | 288 - .../pip/_vendor/html5lib/_inputstream.py | 923 -- .../pip/_vendor/html5lib/_tokenizer.py | 1721 ---- .../pip/_vendor/html5lib/_trie/__init__.py | 14 - .../_trie/__pycache__/__init__.cpython-38.pyc | Bin 386 -> 0 bytes .../_trie/__pycache__/_base.cpython-38.pyc | Bin 1565 -> 0 bytes .../_trie/__pycache__/datrie.cpython-38.pyc | Bin 1998 -> 0 bytes .../_trie/__pycache__/py.cpython-38.pyc | Bin 2222 -> 0 bytes .../pip/_vendor/html5lib/_trie/_base.py | 40 - .../pip/_vendor/html5lib/_trie/datrie.py | 44 - .../pip/_vendor/html5lib/_trie/py.py | 67 - .../pip/_vendor/html5lib/_utils.py | 124 - .../pip/_vendor/html5lib/constants.py | 2947 ------ .../pip/_vendor/html5lib/filters/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 161 -> 0 bytes .../alphabeticalattributes.cpython-38.pyc | Bin 1283 -> 0 bytes .../filters/__pycache__/base.cpython-38.pyc | Bin 831 -> 0 bytes .../inject_meta_charset.cpython-38.pyc | Bin 1837 -> 0 bytes .../filters/__pycache__/lint.cpython-38.pyc | Bin 2595 -> 0 bytes .../__pycache__/optionaltags.cpython-38.pyc | Bin 2724 -> 0 bytes .../__pycache__/sanitizer.cpython-38.pyc | Bin 16266 -> 0 bytes .../__pycache__/whitespace.cpython-38.pyc | Bin 1329 -> 0 bytes .../filters/alphabeticalattributes.py | 29 - .../pip/_vendor/html5lib/filters/base.py | 12 - .../html5lib/filters/inject_meta_charset.py | 73 - .../pip/_vendor/html5lib/filters/lint.py | 93 - .../_vendor/html5lib/filters/optionaltags.py | 207 - .../pip/_vendor/html5lib/filters/sanitizer.py | 896 -- .../_vendor/html5lib/filters/whitespace.py | 38 - .../pip/_vendor/html5lib/html5parser.py | 2791 ------ .../pip/_vendor/html5lib/serializer.py | 409 - .../_vendor/html5lib/treeadapters/__init__.py | 30 - .../__pycache__/__init__.cpython-38.pyc | Bin 900 -> 0 bytes .../__pycache__/genshi.cpython-38.pyc | Bin 1506 -> 0 bytes .../__pycache__/sax.cpython-38.pyc | Bin 1441 -> 0 bytes .../_vendor/html5lib/treeadapters/genshi.py | 54 - .../pip/_vendor/html5lib/treeadapters/sax.py | 50 - .../_vendor/html5lib/treebuilders/__init__.py | 88 - .../__pycache__/__init__.cpython-38.pyc | Bin 3285 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 11311 -> 0 bytes .../__pycache__/dom.cpython-38.pyc | Bin 9418 -> 0 bytes .../__pycache__/etree.cpython-38.pyc | Bin 11805 -> 0 bytes .../__pycache__/etree_lxml.cpython-38.pyc | Bin 11773 -> 0 bytes .../pip/_vendor/html5lib/treebuilders/base.py | 417 - .../pip/_vendor/html5lib/treebuilders/dom.py | 239 - .../_vendor/html5lib/treebuilders/etree.py | 340 - .../html5lib/treebuilders/etree_lxml.py | 366 - .../_vendor/html5lib/treewalkers/__init__.py | 154 - .../__pycache__/__init__.cpython-38.pyc | Bin 3966 -> 0 bytes .../__pycache__/base.cpython-38.pyc | Bin 6966 -> 0 bytes .../__pycache__/dom.cpython-38.pyc | Bin 1695 -> 0 bytes .../__pycache__/etree.cpython-38.pyc | Bin 3480 -> 0 bytes .../__pycache__/etree_lxml.cpython-38.pyc | Bin 6579 -> 0 bytes .../__pycache__/genshi.cpython-38.pyc | Bin 1853 -> 0 bytes .../pip/_vendor/html5lib/treewalkers/base.py | 252 - .../pip/_vendor/html5lib/treewalkers/dom.py | 43 - .../pip/_vendor/html5lib/treewalkers/etree.py | 130 - .../html5lib/treewalkers/etree_lxml.py | 213 - .../_vendor/html5lib/treewalkers/genshi.py | 69 - .../pip/_vendor/idna/__init__.py | 2 - .../idna/__pycache__/__init__.cpython-38.pyc | Bin 218 -> 0 bytes .../idna/__pycache__/codec.cpython-38.pyc | Bin 2872 -> 0 bytes .../idna/__pycache__/compat.cpython-38.pyc | Bin 590 -> 0 bytes .../idna/__pycache__/core.cpython-38.pyc | Bin 9006 -> 0 bytes .../idna/__pycache__/idnadata.cpython-38.pyc | Bin 21342 -> 0 bytes .../idna/__pycache__/intranges.cpython-38.pyc | Bin 1770 -> 0 bytes .../__pycache__/package_data.cpython-38.pyc | Bin 172 -> 0 bytes .../idna/__pycache__/uts46data.cpython-38.pyc | Bin 174145 -> 0 bytes .../site-packages/pip/_vendor/idna/codec.py | 118 - .../site-packages/pip/_vendor/idna/compat.py | 12 - .../site-packages/pip/_vendor/idna/core.py | 396 - .../pip/_vendor/idna/idnadata.py | 1979 ---- .../pip/_vendor/idna/intranges.py | 53 - .../pip/_vendor/idna/package_data.py | 2 - .../pip/_vendor/idna/uts46data.py | 8205 ----------------- .../site-packages/pip/_vendor/ipaddress.py | 2420 ----- .../pip/_vendor/msgpack/__init__.py | 65 - .../__pycache__/__init__.cpython-38.pyc | Bin 1915 -> 0 bytes .../__pycache__/_version.cpython-38.pyc | Bin 179 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 1813 -> 0 bytes .../__pycache__/fallback.cpython-38.pyc | Bin 26270 -> 0 bytes .../pip/_vendor/msgpack/_version.py | 1 - .../pip/_vendor/msgpack/exceptions.py | 48 - .../pip/_vendor/msgpack/fallback.py | 1027 --- .../pip/_vendor/packaging/__about__.py | 27 - .../pip/_vendor/packaging/__init__.py | 26 - .../__pycache__/__about__.cpython-38.pyc | Bin 694 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 532 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 1109 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2858 -> 0 bytes .../__pycache__/_typing.cpython-38.pyc | Bin 1449 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 9289 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 4064 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 20287 -> 0 bytes .../packaging/__pycache__/tags.cpython-38.pyc | Bin 16537 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 1526 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 13301 -> 0 bytes .../pip/_vendor/packaging/_compat.py | 38 - .../pip/_vendor/packaging/_structures.py | 86 - .../pip/_vendor/packaging/_typing.py | 39 - .../pip/_vendor/packaging/markers.py | 328 - .../pip/_vendor/packaging/requirements.py | 145 - .../pip/_vendor/packaging/specifiers.py | 849 -- .../pip/_vendor/packaging/tags.py | 730 -- .../pip/_vendor/packaging/utils.py | 62 - .../pip/_vendor/packaging/version.py | 535 -- .../pip/_vendor/pep517/__init__.py | 4 - .../__pycache__/__init__.cpython-38.pyc | Bin 243 -> 0 bytes .../__pycache__/_in_process.cpython-38.pyc | Bin 7426 -> 0 bytes .../pep517/__pycache__/build.cpython-38.pyc | Bin 3331 -> 0 bytes .../pep517/__pycache__/check.cpython-38.pyc | Bin 4765 -> 0 bytes .../__pycache__/colorlog.cpython-38.pyc | Bin 2913 -> 0 bytes .../pep517/__pycache__/compat.cpython-38.pyc | Bin 1010 -> 0 bytes .../__pycache__/dirtools.cpython-38.pyc | Bin 1292 -> 0 bytes .../__pycache__/envbuild.cpython-38.pyc | Bin 4383 -> 0 bytes .../pep517/__pycache__/meta.cpython-38.pyc | Bin 2819 -> 0 bytes .../__pycache__/wrappers.cpython-38.pyc | Bin 10139 -> 0 bytes .../pip/_vendor/pep517/_in_process.py | 257 - .../site-packages/pip/_vendor/pep517/build.py | 124 - .../site-packages/pip/_vendor/pep517/check.py | 203 - .../pip/_vendor/pep517/colorlog.py | 115 - .../pip/_vendor/pep517/compat.py | 34 - .../pip/_vendor/pep517/dirtools.py | 44 - .../pip/_vendor/pep517/envbuild.py | 167 - .../site-packages/pip/_vendor/pep517/meta.py | 92 - .../pip/_vendor/pep517/wrappers.py | 298 - .../pip/_vendor/pkg_resources/__init__.py | 3296 ------- .../__pycache__/__init__.cpython-38.pyc | Bin 100311 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 609 -> 0 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 - .../pip/_vendor/progress/__init__.py | 177 - .../__pycache__/__init__.cpython-38.pyc | Bin 5578 -> 0 bytes .../progress/__pycache__/bar.cpython-38.pyc | Bin 2602 -> 0 bytes .../__pycache__/counter.cpython-38.pyc | Bin 1434 -> 0 bytes .../__pycache__/spinner.cpython-38.pyc | Bin 1361 -> 0 bytes .../site-packages/pip/_vendor/progress/bar.py | 91 - .../pip/_vendor/progress/counter.py | 41 - .../pip/_vendor/progress/spinner.py | 43 - .../site-packages/pip/_vendor/pyparsing.py | 7090 -------------- .../pip/_vendor/pytoml/__init__.py | 4 - .../__pycache__/__init__.cpython-38.pyc | Bin 337 -> 0 bytes .../pytoml/__pycache__/core.cpython-38.pyc | Bin 914 -> 0 bytes .../pytoml/__pycache__/parser.cpython-38.pyc | Bin 10079 -> 0 bytes .../pytoml/__pycache__/test.cpython-38.pyc | Bin 1216 -> 0 bytes .../pytoml/__pycache__/utils.cpython-38.pyc | Bin 2126 -> 0 bytes .../pytoml/__pycache__/writer.cpython-38.pyc | Bin 3702 -> 0 bytes .../site-packages/pip/_vendor/pytoml/core.py | 13 - .../pip/_vendor/pytoml/parser.py | 342 - .../site-packages/pip/_vendor/pytoml/test.py | 30 - .../site-packages/pip/_vendor/pytoml/utils.py | 67 - .../pip/_vendor/pytoml/writer.py | 114 - .../pip/_vendor/requests/__init__.py | 133 - .../__pycache__/__init__.cpython-38.pyc | Bin 3464 -> 0 bytes .../__pycache__/__version__.cpython-38.pyc | Bin 511 -> 0 bytes .../_internal_utils.cpython-38.pyc | Bin 1281 -> 0 bytes .../__pycache__/adapters.cpython-38.pyc | Bin 16944 -> 0 bytes .../requests/__pycache__/api.cpython-38.pyc | Bin 6468 -> 0 bytes .../requests/__pycache__/auth.cpython-38.pyc | Bin 8290 -> 0 bytes .../requests/__pycache__/certs.cpython-38.pyc | Bin 594 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 1573 -> 0 bytes .../__pycache__/cookies.cpython-38.pyc | Bin 18795 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 5205 -> 0 bytes .../requests/__pycache__/help.cpython-38.pyc | Bin 2691 -> 0 bytes .../requests/__pycache__/hooks.cpython-38.pyc | Bin 953 -> 0 bytes .../__pycache__/models.cpython-38.pyc | Bin 23889 -> 0 bytes .../__pycache__/packages.cpython-38.pyc | Bin 463 -> 0 bytes .../__pycache__/sessions.cpython-38.pyc | Bin 19503 -> 0 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 4149 -> 0 bytes .../__pycache__/structures.cpython-38.pyc | Bin 4391 -> 0 bytes .../requests/__pycache__/utils.cpython-38.pyc | Bin 22160 -> 0 bytes .../pip/_vendor/requests/__version__.py | 14 - .../pip/_vendor/requests/_internal_utils.py | 42 - .../pip/_vendor/requests/adapters.py | 533 -- .../site-packages/pip/_vendor/requests/api.py | 158 - .../pip/_vendor/requests/auth.py | 305 - .../pip/_vendor/requests/certs.py | 18 - .../pip/_vendor/requests/compat.py | 74 - .../pip/_vendor/requests/cookies.py | 549 -- .../pip/_vendor/requests/exceptions.py | 126 - .../pip/_vendor/requests/help.py | 119 - .../pip/_vendor/requests/hooks.py | 34 - .../pip/_vendor/requests/models.py | 953 -- .../pip/_vendor/requests/packages.py | 16 - .../pip/_vendor/requests/sessions.py | 770 -- .../pip/_vendor/requests/status_codes.py | 120 - .../pip/_vendor/requests/structures.py | 103 - .../pip/_vendor/requests/utils.py | 977 -- .../site-packages/pip/_vendor/retrying.py | 267 - .../site-packages/pip/_vendor/six.py | 980 -- .../pip/_vendor/urllib3/__init__.py | 86 - .../__pycache__/__init__.cpython-38.pyc | Bin 2082 -> 0 bytes .../__pycache__/_collections.cpython-38.pyc | Bin 10636 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 10542 -> 0 bytes .../__pycache__/connectionpool.cpython-38.pyc | Bin 24043 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 10025 -> 0 bytes .../urllib3/__pycache__/fields.cpython-38.pyc | Bin 8096 -> 0 bytes .../__pycache__/filepost.cpython-38.pyc | Bin 2731 -> 0 bytes .../__pycache__/poolmanager.cpython-38.pyc | Bin 12901 -> 0 bytes .../__pycache__/request.cpython-38.pyc | Bin 5619 -> 0 bytes .../__pycache__/response.cpython-38.pyc | Bin 20332 -> 0 bytes .../pip/_vendor/urllib3/_collections.py | 336 - .../pip/_vendor/urllib3/connection.py | 448 - .../pip/_vendor/urllib3/connectionpool.py | 1051 --- .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 160 -> 0 bytes .../_appengine_environ.cpython-38.pyc | Bin 1362 -> 0 bytes .../__pycache__/appengine.cpython-38.pyc | Bin 8233 -> 0 bytes .../__pycache__/ntlmpool.cpython-38.pyc | Bin 3241 -> 0 bytes .../__pycache__/pyopenssl.cpython-38.pyc | Bin 14930 -> 0 bytes .../securetransport.cpython-38.pyc | Bin 19792 -> 0 bytes .../contrib/__pycache__/socks.cpython-38.pyc | Bin 5544 -> 0 bytes .../urllib3/contrib/_appengine_environ.py | 36 - .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 177 -> 0 bytes .../__pycache__/bindings.cpython-38.pyc | Bin 10196 -> 0 bytes .../__pycache__/low_level.cpython-38.pyc | Bin 7517 -> 0 bytes .../contrib/_securetransport/bindings.py | 493 - .../contrib/_securetransport/low_level.py | 328 - .../pip/_vendor/urllib3/contrib/appengine.py | 314 - .../pip/_vendor/urllib3/contrib/ntlmpool.py | 121 - .../pip/_vendor/urllib3/contrib/pyopenssl.py | 498 - .../urllib3/contrib/securetransport.py | 859 -- .../pip/_vendor/urllib3/contrib/socks.py | 210 - .../pip/_vendor/urllib3/exceptions.py | 255 - .../pip/_vendor/urllib3/fields.py | 273 - .../pip/_vendor/urllib3/filepost.py | 98 - .../pip/_vendor/urllib3/packages/__init__.py | 5 - .../__pycache__/__init__.cpython-38.pyc | Bin 274 -> 0 bytes .../packages/__pycache__/six.cpython-38.pyc | Bin 26486 -> 0 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 171 -> 0 bytes .../__pycache__/makefile.cpython-38.pyc | Bin 1275 -> 0 bytes .../urllib3/packages/backports/makefile.py | 52 - .../pip/_vendor/urllib3/packages/six.py | 1021 -- .../packages/ssl_match_hostname/__init__.py | 19 - .../__pycache__/__init__.cpython-38.pyc | Bin 515 -> 0 bytes .../_implementation.cpython-38.pyc | Bin 3296 -> 0 bytes .../ssl_match_hostname/_implementation.py | 160 - .../pip/_vendor/urllib3/poolmanager.py | 470 - .../pip/_vendor/urllib3/request.py | 171 - .../pip/_vendor/urllib3/response.py | 809 -- .../pip/_vendor/urllib3/util/__init__.py | 46 - .../util/__pycache__/__init__.cpython-38.pyc | Bin 980 -> 0 bytes .../__pycache__/connection.cpython-38.pyc | Bin 3153 -> 0 bytes .../util/__pycache__/queue.cpython-38.pyc | Bin 1025 -> 0 bytes .../util/__pycache__/request.cpython-38.pyc | Bin 3319 -> 0 bytes .../util/__pycache__/response.cpython-38.pyc | Bin 1946 -> 0 bytes .../util/__pycache__/retry.cpython-38.pyc | Bin 12942 -> 0 bytes .../util/__pycache__/ssl_.cpython-38.pyc | Bin 9818 -> 0 bytes .../util/__pycache__/timeout.cpython-38.pyc | Bin 8840 -> 0 bytes .../util/__pycache__/url.cpython-38.pyc | Bin 10624 -> 0 bytes .../util/__pycache__/wait.cpython-38.pyc | Bin 3074 -> 0 bytes .../pip/_vendor/urllib3/util/connection.py | 138 - .../pip/_vendor/urllib3/util/queue.py | 21 - .../pip/_vendor/urllib3/util/request.py | 135 - .../pip/_vendor/urllib3/util/response.py | 86 - .../pip/_vendor/urllib3/util/retry.py | 450 - .../pip/_vendor/urllib3/util/ssl_.py | 407 - .../pip/_vendor/urllib3/util/timeout.py | 258 - .../pip/_vendor/urllib3/util/url.py | 436 - .../pip/_vendor/urllib3/util/wait.py | 153 - .../pip/_vendor/webencodings/__init__.py | 342 - .../__pycache__/__init__.cpython-38.pyc | Bin 9700 -> 0 bytes .../__pycache__/labels.cpython-38.pyc | Bin 3798 -> 0 bytes .../__pycache__/mklabels.cpython-38.pyc | Bin 1894 -> 0 bytes .../__pycache__/tests.cpython-38.pyc | Bin 5060 -> 0 bytes .../__pycache__/x_user_defined.cpython-38.pyc | Bin 2628 -> 0 bytes .../pip/_vendor/webencodings/labels.py | 231 - .../pip/_vendor/webencodings/mklabels.py | 59 - .../pip/_vendor/webencodings/tests.py | 153 - .../_vendor/webencodings/x_user_defined.py | 325 - .../site-packages/pkg_resources/__init__.py | 3299 ------- .../__pycache__/__init__.cpython-38.pyc | Bin 100400 -> 0 bytes .../__pycache__/py2_warn.cpython-38.pyc | Bin 935 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 604 -> 0 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 161 -> 0 bytes .../__pycache__/appdirs.cpython-38.pyc | Bin 20514 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 201638 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 24434 -> 0 bytes .../pkg_resources/_vendor/appdirs.py | 608 -- .../_vendor/packaging/__about__.py | 21 - .../_vendor/packaging/__init__.py | 14 - .../__pycache__/__about__.cpython-38.pyc | Bin 711 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 549 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 985 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2767 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 8923 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 3882 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 19791 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 470 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 10638 -> 0 bytes .../_vendor/packaging/_compat.py | 30 - .../_vendor/packaging/_structures.py | 68 - .../_vendor/packaging/markers.py | 301 - .../_vendor/packaging/requirements.py | 127 - .../_vendor/packaging/specifiers.py | 774 -- .../pkg_resources/_vendor/packaging/utils.py | 14 - .../_vendor/packaging/version.py | 393 - .../pkg_resources/_vendor/pyparsing.py | 5742 ------------ .../pkg_resources/_vendor/six.py | 868 -- .../pkg_resources/extern/__init__.py | 73 - .../__pycache__/__init__.cpython-38.pyc | Bin 2410 -> 0 bytes .../site-packages/pkg_resources/py2_warn.py | 22 - .../site-packages/pkg_resources/py31compat.py | 23 - .../site-packages/pygments/__init__.py | 90 - .../site-packages/pygments/__main__.py | 18 - .../__pycache__/__init__.cpython-38.pyc | Bin 3088 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 540 -> 0 bytes .../__pycache__/cmdline.cpython-38.pyc | Bin 12670 -> 0 bytes .../__pycache__/console.cpython-38.pyc | Bin 1866 -> 0 bytes .../__pycache__/filter.cpython-38.pyc | Bin 2659 -> 0 bytes .../__pycache__/formatter.cpython-38.pyc | Bin 2969 -> 0 bytes .../pygments/__pycache__/lexer.cpython-38.pyc | Bin 24467 -> 0 bytes .../__pycache__/modeline.cpython-38.pyc | Bin 1138 -> 0 bytes .../__pycache__/plugin.cpython-38.pyc | Bin 2036 -> 0 bytes .../__pycache__/regexopt.cpython-38.pyc | Bin 2902 -> 0 bytes .../__pycache__/scanner.cpython-38.pyc | Bin 3515 -> 0 bytes .../__pycache__/sphinxext.cpython-38.pyc | Bin 4523 -> 0 bytes .../pygments/__pycache__/style.cpython-38.pyc | Bin 4262 -> 0 bytes .../pygments/__pycache__/token.cpython-38.pyc | Bin 4465 -> 0 bytes .../__pycache__/unistring.cpython-38.pyc | Bin 32141 -> 0 bytes .../pygments/__pycache__/util.cpython-38.pyc | Bin 10669 -> 0 bytes .../site-packages/pygments/cmdline.py | 573 -- .../site-packages/pygments/console.py | 71 - .../site-packages/pygments/filter.py | 74 - .../pygments/filters/__init__.py | 350 - .../__pycache__/__init__.cpython-38.pyc | Bin 11426 -> 0 bytes .../site-packages/pygments/formatter.py | 95 - .../pygments/formatters/__init__.py | 154 - .../__pycache__/__init__.cpython-38.pyc | Bin 4545 -> 0 bytes .../__pycache__/_mapping.cpython-38.pyc | Bin 5037 -> 0 bytes .../__pycache__/bbcode.cpython-38.pyc | Bin 2989 -> 0 bytes .../__pycache__/html.cpython-38.pyc | Bin 26609 -> 0 bytes .../formatters/__pycache__/img.cpython-38.pyc | Bin 16515 -> 0 bytes .../formatters/__pycache__/irc.cpython-38.pyc | Bin 4381 -> 0 bytes .../__pycache__/latex.cpython-38.pyc | Bin 12503 -> 0 bytes .../__pycache__/other.cpython-38.pyc | Bin 4880 -> 0 bytes .../formatters/__pycache__/rtf.cpython-38.pyc | Bin 4053 -> 0 bytes .../formatters/__pycache__/svg.cpython-38.pyc | Bin 5276 -> 0 bytes .../__pycache__/terminal.cpython-38.pyc | Bin 4003 -> 0 bytes .../__pycache__/terminal256.cpython-38.pyc | Bin 8575 -> 0 bytes .../pygments/formatters/_mapping.py | 85 - .../pygments/formatters/bbcode.py | 109 - .../site-packages/pygments/formatters/html.py | 880 -- .../site-packages/pygments/formatters/img.py | 602 -- .../site-packages/pygments/formatters/irc.py | 182 - .../pygments/formatters/latex.py | 482 - .../pygments/formatters/other.py | 164 - .../site-packages/pygments/formatters/rtf.py | 147 - .../site-packages/pygments/formatters/svg.py | 153 - .../pygments/formatters/terminal.py | 136 - .../pygments/formatters/terminal256.py | 315 - .../python3.8/site-packages/pygments/lexer.py | 881 -- .../site-packages/pygments/lexers/__init__.py | 343 - .../__pycache__/__init__.cpython-38.pyc | Bin 9046 -> 0 bytes .../__pycache__/_asy_builtins.cpython-38.pyc | Bin 26611 -> 0 bytes .../__pycache__/_cl_builtins.cpython-38.pyc | Bin 16159 -> 0 bytes .../_cocoa_builtins.cpython-38.pyc | Bin 42538 -> 0 bytes .../_csound_builtins.cpython-38.pyc | Bin 15248 -> 0 bytes .../_lasso_builtins.cpython-38.pyc | Bin 76798 -> 0 bytes .../__pycache__/_lua_builtins.cpython-38.pyc | Bin 6612 -> 0 bytes .../__pycache__/_mapping.cpython-38.pyc | Bin 43592 -> 0 bytes .../__pycache__/_mql_builtins.cpython-38.pyc | Bin 17954 -> 0 bytes .../_openedge_builtins.cpython-38.pyc | Bin 33306 -> 0 bytes .../__pycache__/_php_builtins.cpython-38.pyc | Bin 89025 -> 0 bytes .../_postgres_builtins.cpython-38.pyc | Bin 7567 -> 0 bytes .../_scilab_builtins.cpython-38.pyc | Bin 34106 -> 0 bytes .../_sourcemod_builtins.cpython-38.pyc | Bin 20731 -> 0 bytes .../__pycache__/_stan_builtins.cpython-38.pyc | Bin 7430 -> 0 bytes .../_stata_builtins.cpython-38.pyc | Bin 19535 -> 0 bytes .../__pycache__/_tsql_builtins.cpython-38.pyc | Bin 8742 -> 0 bytes .../_vbscript_builtins.cpython-38.pyc | Bin 3789 -> 0 bytes .../__pycache__/_vim_builtins.cpython-38.pyc | Bin 30647 -> 0 bytes .../__pycache__/actionscript.cpython-38.pyc | Bin 8362 -> 0 bytes .../lexers/__pycache__/agile.cpython-38.pyc | Bin 1237 -> 0 bytes .../lexers/__pycache__/algebra.cpython-38.pyc | Bin 6431 -> 0 bytes .../lexers/__pycache__/ambient.cpython-38.pyc | Bin 2219 -> 0 bytes .../lexers/__pycache__/ampl.cpython-38.pyc | Bin 3205 -> 0 bytes .../lexers/__pycache__/apl.cpython-38.pyc | Bin 1778 -> 0 bytes .../__pycache__/archetype.cpython-38.pyc | Bin 6345 -> 0 bytes .../lexers/__pycache__/asm.cpython-38.pyc | Bin 20117 -> 0 bytes .../__pycache__/automation.cpython-38.pyc | Bin 16025 -> 0 bytes .../lexers/__pycache__/basic.cpython-38.pyc | Bin 17591 -> 0 bytes .../lexers/__pycache__/bibtex.cpython-38.pyc | Bin 3546 -> 0 bytes .../lexers/__pycache__/boa.cpython-38.pyc | Bin 2962 -> 0 bytes .../__pycache__/business.cpython-38.pyc | Bin 18349 -> 0 bytes .../lexers/__pycache__/c_cpp.cpython-38.pyc | Bin 7516 -> 0 bytes .../lexers/__pycache__/c_like.cpython-38.pyc | Bin 20983 -> 0 bytes .../__pycache__/capnproto.cpython-38.pyc | Bin 1721 -> 0 bytes .../lexers/__pycache__/chapel.cpython-38.pyc | Bin 2710 -> 0 bytes .../lexers/__pycache__/clean.cpython-38.pyc | Bin 3818 -> 0 bytes .../__pycache__/compiled.cpython-38.pyc | Bin 1853 -> 0 bytes .../lexers/__pycache__/configs.cpython-38.pyc | Bin 21966 -> 0 bytes .../lexers/__pycache__/console.cpython-38.pyc | Bin 3460 -> 0 bytes .../lexers/__pycache__/crystal.cpython-38.pyc | Bin 9696 -> 0 bytes .../lexers/__pycache__/csound.cpython-38.pyc | Bin 8647 -> 0 bytes .../lexers/__pycache__/css.cpython-38.pyc | Bin 20802 -> 0 bytes .../lexers/__pycache__/d.cpython-38.pyc | Bin 5789 -> 0 bytes .../lexers/__pycache__/dalvik.cpython-38.pyc | Bin 3320 -> 0 bytes .../lexers/__pycache__/data.cpython-38.pyc | Bin 10513 -> 0 bytes .../lexers/__pycache__/diff.cpython-38.pyc | Bin 3673 -> 0 bytes .../lexers/__pycache__/dotnet.cpython-38.pyc | Bin 18983 -> 0 bytes .../lexers/__pycache__/dsls.cpython-38.pyc | Bin 23753 -> 0 bytes .../lexers/__pycache__/dylan.cpython-38.pyc | Bin 8114 -> 0 bytes .../lexers/__pycache__/ecl.cpython-38.pyc | Bin 4361 -> 0 bytes .../lexers/__pycache__/eiffel.cpython-38.pyc | Bin 2213 -> 0 bytes .../lexers/__pycache__/elm.cpython-38.pyc | Bin 2117 -> 0 bytes .../lexers/__pycache__/email.cpython-38.pyc | Bin 4346 -> 0 bytes .../lexers/__pycache__/erlang.cpython-38.pyc | Bin 12670 -> 0 bytes .../__pycache__/esoteric.cpython-38.pyc | Bin 7052 -> 0 bytes .../lexers/__pycache__/ezhil.cpython-38.pyc | Bin 2835 -> 0 bytes .../lexers/__pycache__/factor.cpython-38.pyc | Bin 12300 -> 0 bytes .../lexers/__pycache__/fantom.cpython-38.pyc | Bin 4842 -> 0 bytes .../lexers/__pycache__/felix.cpython-38.pyc | Bin 5511 -> 0 bytes .../__pycache__/floscript.cpython-38.pyc | Bin 2286 -> 0 bytes .../lexers/__pycache__/forth.cpython-38.pyc | Bin 4623 -> 0 bytes .../lexers/__pycache__/fortran.cpython-38.pyc | Bin 7011 -> 0 bytes .../lexers/__pycache__/foxpro.cpython-38.pyc | Bin 20057 -> 0 bytes .../lexers/__pycache__/freefem.cpython-38.pyc | Bin 16899 -> 0 bytes .../__pycache__/functional.cpython-38.pyc | Bin 973 -> 0 bytes .../lexers/__pycache__/go.cpython-38.pyc | Bin 2621 -> 0 bytes .../grammar_notation.cpython-38.pyc | Bin 4674 -> 0 bytes .../lexers/__pycache__/graph.cpython-38.pyc | Bin 2370 -> 0 bytes .../__pycache__/graphics.cpython-38.pyc | Bin 24153 -> 0 bytes .../lexers/__pycache__/haskell.cpython-38.pyc | Bin 18687 -> 0 bytes .../lexers/__pycache__/haxe.cpython-38.pyc | Bin 12035 -> 0 bytes .../lexers/__pycache__/hdl.cpython-38.pyc | Bin 11015 -> 0 bytes .../lexers/__pycache__/hexdump.cpython-38.pyc | Bin 2627 -> 0 bytes .../lexers/__pycache__/html.cpython-38.pyc | Bin 11751 -> 0 bytes .../lexers/__pycache__/idl.cpython-38.pyc | Bin 11401 -> 0 bytes .../lexers/__pycache__/igor.cpython-38.pyc | Bin 24627 -> 0 bytes .../lexers/__pycache__/inferno.cpython-38.pyc | Bin 2542 -> 0 bytes .../__pycache__/installers.cpython-38.pyc | Bin 9517 -> 0 bytes .../__pycache__/int_fiction.cpython-38.pyc | Bin 26533 -> 0 bytes .../lexers/__pycache__/iolang.cpython-38.pyc | Bin 1681 -> 0 bytes .../lexers/__pycache__/j.cpython-38.pyc | Bin 2931 -> 0 bytes .../__pycache__/javascript.cpython-38.pyc | Bin 34010 -> 0 bytes .../lexers/__pycache__/julia.cpython-38.pyc | Bin 10468 -> 0 bytes .../lexers/__pycache__/jvm.cpython-38.pyc | Bin 41042 -> 0 bytes .../lexers/__pycache__/lisp.cpython-38.pyc | Bin 105512 -> 0 bytes .../lexers/__pycache__/make.cpython-38.pyc | Bin 4504 -> 0 bytes .../lexers/__pycache__/markup.cpython-38.pyc | Bin 14335 -> 0 bytes .../lexers/__pycache__/math.cpython-38.pyc | Bin 976 -> 0 bytes .../lexers/__pycache__/matlab.cpython-38.pyc | Bin 18398 -> 0 bytes .../lexers/__pycache__/mime.cpython-38.pyc | Bin 6355 -> 0 bytes .../lexers/__pycache__/ml.cpython-38.pyc | Bin 11119 -> 0 bytes .../__pycache__/modeling.cpython-38.pyc | Bin 8440 -> 0 bytes .../lexers/__pycache__/modula2.cpython-38.pyc | Bin 19461 -> 0 bytes .../lexers/__pycache__/monte.cpython-38.pyc | Bin 4144 -> 0 bytes .../lexers/__pycache__/ncl.cpython-38.pyc | Bin 45347 -> 0 bytes .../lexers/__pycache__/nimrod.cpython-38.pyc | Bin 3942 -> 0 bytes .../lexers/__pycache__/nit.cpython-38.pyc | Bin 2299 -> 0 bytes .../lexers/__pycache__/nix.cpython-38.pyc | Bin 3321 -> 0 bytes .../lexers/__pycache__/oberon.cpython-38.pyc | Bin 2485 -> 0 bytes .../__pycache__/objective.cpython-38.pyc | Bin 14445 -> 0 bytes .../lexers/__pycache__/ooc.cpython-38.pyc | Bin 2366 -> 0 bytes .../lexers/__pycache__/other.cpython-38.pyc | Bin 2341 -> 0 bytes .../__pycache__/parasail.cpython-38.pyc | Bin 2287 -> 0 bytes .../lexers/__pycache__/parsers.cpython-38.pyc | Bin 18102 -> 0 bytes .../lexers/__pycache__/pascal.cpython-38.pyc | Bin 21421 -> 0 bytes .../lexers/__pycache__/pawn.cpython-38.pyc | Bin 5560 -> 0 bytes .../lexers/__pycache__/perl.cpython-38.pyc | Bin 20965 -> 0 bytes .../lexers/__pycache__/php.cpython-38.pyc | Bin 8034 -> 0 bytes .../lexers/__pycache__/pony.cpython-38.pyc | Bin 2500 -> 0 bytes .../lexers/__pycache__/praat.cpython-38.pyc | Bin 7939 -> 0 bytes .../lexers/__pycache__/prolog.cpython-38.pyc | Bin 7215 -> 0 bytes .../lexers/__pycache__/python.cpython-38.pyc | Bin 29019 -> 0 bytes .../lexers/__pycache__/qvt.cpython-38.pyc | Bin 4135 -> 0 bytes .../lexers/__pycache__/r.cpython-38.pyc | Bin 4293 -> 0 bytes .../lexers/__pycache__/rdf.cpython-38.pyc | Bin 7772 -> 0 bytes .../lexers/__pycache__/rebol.cpython-38.pyc | Bin 11478 -> 0 bytes .../__pycache__/resource.cpython-38.pyc | Bin 2339 -> 0 bytes .../lexers/__pycache__/rnc.cpython-38.pyc | Bin 1513 -> 0 bytes .../__pycache__/roboconf.cpython-38.pyc | Bin 1906 -> 0 bytes .../__pycache__/robotframework.cpython-38.pyc | Bin 19284 -> 0 bytes .../lexers/__pycache__/ruby.cpython-38.pyc | Bin 13119 -> 0 bytes .../lexers/__pycache__/rust.cpython-38.pyc | Bin 4282 -> 0 bytes .../lexers/__pycache__/sas.cpython-38.pyc | Bin 5957 -> 0 bytes .../lexers/__pycache__/scdoc.cpython-38.pyc | Bin 1636 -> 0 bytes .../__pycache__/scripting.cpython-38.pyc | Bin 48262 -> 0 bytes .../lexers/__pycache__/sgf.cpython-38.pyc | Bin 1782 -> 0 bytes .../lexers/__pycache__/shell.cpython-38.pyc | Bin 22250 -> 0 bytes .../lexers/__pycache__/slash.cpython-38.pyc | Bin 4559 -> 0 bytes .../__pycache__/smalltalk.cpython-38.pyc | Bin 4478 -> 0 bytes .../lexers/__pycache__/smv.cpython-38.pyc | Bin 2167 -> 0 bytes .../lexers/__pycache__/snobol.cpython-38.pyc | Bin 1995 -> 0 bytes .../__pycache__/solidity.cpython-38.pyc | Bin 2616 -> 0 bytes .../lexers/__pycache__/special.cpython-38.pyc | Bin 3231 -> 0 bytes .../lexers/__pycache__/sql.cpython-38.pyc | Bin 22808 -> 0 bytes .../lexers/__pycache__/stata.cpython-38.pyc | Bin 2963 -> 0 bytes .../__pycache__/supercollider.cpython-38.pyc | Bin 2807 -> 0 bytes .../lexers/__pycache__/tcl.cpython-38.pyc | Bin 3627 -> 0 bytes .../__pycache__/templates.cpython-38.pyc | Bin 59366 -> 0 bytes .../__pycache__/teraterm.cpython-38.pyc | Bin 4529 -> 0 bytes .../lexers/__pycache__/testing.cpython-38.pyc | Bin 7910 -> 0 bytes .../lexers/__pycache__/text.cpython-38.pyc | Bin 1416 -> 0 bytes .../__pycache__/textedit.cpython-38.pyc | Bin 5025 -> 0 bytes .../__pycache__/textfmts.cpython-38.pyc | Bin 9462 -> 0 bytes .../lexers/__pycache__/theorem.cpython-38.pyc | Bin 12549 -> 0 bytes .../__pycache__/trafficscript.cpython-38.pyc | Bin 1571 -> 0 bytes .../__pycache__/typoscript.cpython-38.pyc | Bin 5347 -> 0 bytes .../lexers/__pycache__/unicon.cpython-38.pyc | Bin 9637 -> 0 bytes .../lexers/__pycache__/urbi.cpython-38.pyc | Bin 3932 -> 0 bytes .../lexers/__pycache__/varnish.cpython-38.pyc | Bin 5026 -> 0 bytes .../__pycache__/verification.cpython-38.pyc | Bin 2819 -> 0 bytes .../lexers/__pycache__/web.cpython-38.pyc | Bin 1226 -> 0 bytes .../lexers/__pycache__/webmisc.cpython-38.pyc | Bin 24365 -> 0 bytes .../lexers/__pycache__/whiley.cpython-38.pyc | Bin 2468 -> 0 bytes .../lexers/__pycache__/x10.cpython-38.pyc | Bin 1848 -> 0 bytes .../lexers/__pycache__/xorg.cpython-38.pyc | Bin 1052 -> 0 bytes .../lexers/__pycache__/zig.cpython-38.pyc | Bin 3167 -> 0 bytes .../pygments/lexers/_asy_builtins.py | 1645 ---- .../pygments/lexers/_cl_builtins.py | 232 - .../pygments/lexers/_cocoa_builtins.py | 73 - .../pygments/lexers/_csound_builtins.py | 1680 ---- .../pygments/lexers/_lasso_builtins.py | 5327 ----------- .../pygments/lexers/_lua_builtins.py | 295 - .../site-packages/pygments/lexers/_mapping.py | 529 -- .../pygments/lexers/_mql_builtins.py | 1172 --- .../pygments/lexers/_openedge_builtins.py | 2547 ----- .../pygments/lexers/_php_builtins.py | 4756 ---------- .../pygments/lexers/_postgres_builtins.py | 621 -- .../pygments/lexers/_scilab_builtins.py | 3094 ------- .../pygments/lexers/_sourcemod_builtins.py | 1163 --- .../pygments/lexers/_stan_builtins.py | 558 -- .../pygments/lexers/_stata_builtins.py | 421 - .../pygments/lexers/_tsql_builtins.py | 1004 -- .../pygments/lexers/_vbscript_builtins.py | 280 - .../pygments/lexers/_vim_builtins.py | 1939 ---- .../pygments/lexers/actionscript.py | 240 - .../site-packages/pygments/lexers/agile.py | 24 - .../site-packages/pygments/lexers/algebra.py | 221 - .../site-packages/pygments/lexers/ambient.py | 76 - .../site-packages/pygments/lexers/ampl.py | 87 - .../site-packages/pygments/lexers/apl.py | 101 - .../pygments/lexers/archetype.py | 318 - .../site-packages/pygments/lexers/asm.py | 776 -- .../pygments/lexers/automation.py | 374 - .../site-packages/pygments/lexers/basic.py | 659 -- .../site-packages/pygments/lexers/bibtex.py | 160 - .../site-packages/pygments/lexers/boa.py | 102 - .../site-packages/pygments/lexers/business.py | 612 -- .../site-packages/pygments/lexers/c_cpp.py | 252 - .../site-packages/pygments/lexers/c_like.py | 571 -- .../pygments/lexers/capnproto.py | 78 - .../site-packages/pygments/lexers/chapel.py | 112 - .../site-packages/pygments/lexers/clean.py | 178 - .../site-packages/pygments/lexers/compiled.py | 34 - .../site-packages/pygments/lexers/configs.py | 940 -- .../site-packages/pygments/lexers/console.py | 114 - .../site-packages/pygments/lexers/crystal.py | 393 - .../site-packages/pygments/lexers/csound.py | 465 - .../site-packages/pygments/lexers/css.py | 692 -- .../site-packages/pygments/lexers/d.py | 251 - .../site-packages/pygments/lexers/dalvik.py | 125 - .../site-packages/pygments/lexers/data.py | 561 -- .../site-packages/pygments/lexers/diff.py | 165 - .../site-packages/pygments/lexers/dotnet.py | 688 -- .../site-packages/pygments/lexers/dsls.py | 960 -- .../site-packages/pygments/lexers/dylan.py | 289 - .../site-packages/pygments/lexers/ecl.py | 125 - .../site-packages/pygments/lexers/eiffel.py | 65 - .../site-packages/pygments/lexers/elm.py | 121 - .../site-packages/pygments/lexers/email.py | 154 - .../site-packages/pygments/lexers/erlang.py | 533 -- .../site-packages/pygments/lexers/esoteric.py | 277 - .../site-packages/pygments/lexers/ezhil.py | 69 - .../site-packages/pygments/lexers/factor.py | 344 - .../site-packages/pygments/lexers/fantom.py | 250 - .../site-packages/pygments/lexers/felix.py | 273 - .../pygments/lexers/floscript.py | 83 - .../site-packages/pygments/lexers/forth.py | 179 - .../site-packages/pygments/lexers/fortran.py | 206 - .../site-packages/pygments/lexers/foxpro.py | 428 - .../site-packages/pygments/lexers/freefem.py | 898 -- .../pygments/lexers/functional.py | 21 - .../site-packages/pygments/lexers/go.py | 101 - .../pygments/lexers/grammar_notation.py | 213 - .../site-packages/pygments/lexers/graph.py | 85 - .../site-packages/pygments/lexers/graphics.py | 781 -- .../site-packages/pygments/lexers/haskell.py | 869 -- .../site-packages/pygments/lexers/haxe.py | 936 -- .../site-packages/pygments/lexers/hdl.py | 376 - .../site-packages/pygments/lexers/hexdump.py | 103 - .../site-packages/pygments/lexers/html.py | 602 -- .../site-packages/pygments/lexers/idl.py | 270 - .../site-packages/pygments/lexers/igor.py | 425 - .../site-packages/pygments/lexers/inferno.py | 96 - .../pygments/lexers/installers.py | 322 - .../pygments/lexers/int_fiction.py | 1343 --- .../site-packages/pygments/lexers/iolang.py | 63 - .../site-packages/pygments/lexers/j.py | 146 - .../pygments/lexers/javascript.py | 1533 --- .../site-packages/pygments/lexers/julia.py | 335 - .../site-packages/pygments/lexers/jvm.py | 1666 ---- .../site-packages/pygments/lexers/lisp.py | 2694 ------ .../site-packages/pygments/lexers/make.py | 202 - .../site-packages/pygments/lexers/markup.py | 598 -- .../site-packages/pygments/lexers/math.py | 21 - .../site-packages/pygments/lexers/matlab.py | 691 -- .../site-packages/pygments/lexers/mime.py | 226 - .../site-packages/pygments/lexers/ml.py | 769 -- .../site-packages/pygments/lexers/modeling.py | 366 - .../site-packages/pygments/lexers/modula2.py | 1561 ---- .../site-packages/pygments/lexers/monte.py | 204 - .../site-packages/pygments/lexers/ncl.py | 894 -- .../site-packages/pygments/lexers/nimrod.py | 159 - .../site-packages/pygments/lexers/nit.py | 64 - .../site-packages/pygments/lexers/nix.py | 136 - .../site-packages/pygments/lexers/oberon.py | 105 - .../pygments/lexers/objective.py | 504 - .../site-packages/pygments/lexers/ooc.py | 85 - .../site-packages/pygments/lexers/other.py | 41 - .../site-packages/pygments/lexers/parasail.py | 79 - .../site-packages/pygments/lexers/parsers.py | 835 -- .../site-packages/pygments/lexers/pascal.py | 644 -- .../site-packages/pygments/lexers/pawn.py | 199 - .../site-packages/pygments/lexers/perl.py | 620 -- .../site-packages/pygments/lexers/php.py | 270 - .../site-packages/pygments/lexers/pony.py | 94 - .../site-packages/pygments/lexers/praat.py | 302 - .../site-packages/pygments/lexers/prolog.py | 306 - .../site-packages/pygments/lexers/python.py | 1062 --- .../site-packages/pygments/lexers/qvt.py | 152 - .../site-packages/pygments/lexers/r.py | 193 - .../site-packages/pygments/lexers/rdf.py | 423 - .../site-packages/pygments/lexers/rebol.py | 431 - .../site-packages/pygments/lexers/resource.py | 85 - .../site-packages/pygments/lexers/rnc.py | 67 - .../site-packages/pygments/lexers/roboconf.py | 82 - .../pygments/lexers/robotframework.py | 560 -- .../site-packages/pygments/lexers/ruby.py | 519 -- .../site-packages/pygments/lexers/rust.py | 220 - .../site-packages/pygments/lexers/sas.py | 228 - .../site-packages/pygments/lexers/scdoc.py | 70 - .../pygments/lexers/scripting.py | 1222 --- .../site-packages/pygments/lexers/sgf.py | 61 - .../site-packages/pygments/lexers/shell.py | 849 -- .../site-packages/pygments/lexers/slash.py | 185 - .../pygments/lexers/smalltalk.py | 195 - .../site-packages/pygments/lexers/smv.py | 79 - .../site-packages/pygments/lexers/snobol.py | 83 - .../site-packages/pygments/lexers/solidity.py | 93 - .../site-packages/pygments/lexers/special.py | 104 - .../site-packages/pygments/lexers/sql.py | 744 -- .../site-packages/pygments/lexers/stata.py | 171 - .../pygments/lexers/supercollider.py | 90 - .../site-packages/pygments/lexers/tcl.py | 145 - .../pygments/lexers/templates.py | 2282 ----- .../site-packages/pygments/lexers/teraterm.py | 158 - .../site-packages/pygments/lexers/testing.py | 207 - .../site-packages/pygments/lexers/text.py | 26 - .../site-packages/pygments/lexers/textedit.py | 169 - .../site-packages/pygments/lexers/textfmts.py | 382 - .../site-packages/pygments/lexers/theorem.py | 456 - .../pygments/lexers/trafficscript.py | 54 - .../pygments/lexers/typoscript.py | 219 - .../site-packages/pygments/lexers/unicon.py | 390 - .../site-packages/pygments/lexers/urbi.py | 133 - .../site-packages/pygments/lexers/varnish.py | 190 - .../pygments/lexers/verification.py | 111 - .../site-packages/pygments/lexers/web.py | 24 - .../site-packages/pygments/lexers/webmisc.py | 989 -- .../site-packages/pygments/lexers/whiley.py | 116 - .../site-packages/pygments/lexers/x10.py | 69 - .../site-packages/pygments/lexers/xorg.py | 37 - .../site-packages/pygments/lexers/zig.py | 129 - .../site-packages/pygments/modeline.py | 44 - .../site-packages/pygments/plugin.py | 70 - .../site-packages/pygments/regexopt.py | 92 - .../site-packages/pygments/scanner.py | 105 - .../site-packages/pygments/sphinxext.py | 158 - .../python3.8/site-packages/pygments/style.py | 182 - .../site-packages/pygments/styles/__init__.py | 87 - .../__pycache__/__init__.cpython-38.pyc | Bin 2600 -> 0 bytes .../styles/__pycache__/abap.cpython-38.pyc | Bin 915 -> 0 bytes .../styles/__pycache__/algol.cpython-38.pyc | Bin 2199 -> 0 bytes .../__pycache__/algol_nu.cpython-38.pyc | Bin 2211 -> 0 bytes .../styles/__pycache__/arduino.cpython-38.pyc | Bin 2160 -> 0 bytes .../styles/__pycache__/autumn.cpython-38.pyc | Bin 1746 -> 0 bytes .../styles/__pycache__/borland.cpython-38.pyc | Bin 1498 -> 0 bytes .../styles/__pycache__/bw.cpython-38.pyc | Bin 1193 -> 0 bytes .../__pycache__/colorful.cpython-38.pyc | Bin 2165 -> 0 bytes .../styles/__pycache__/default.cpython-38.pyc | Bin 1939 -> 0 bytes .../styles/__pycache__/emacs.cpython-38.pyc | Bin 1968 -> 0 bytes .../__pycache__/friendly.cpython-38.pyc | Bin 2027 -> 0 bytes .../styles/__pycache__/fruity.cpython-38.pyc | Bin 1371 -> 0 bytes .../styles/__pycache__/igor.cpython-38.pyc | Bin 943 -> 0 bytes .../styles/__pycache__/inkpot.cpython-38.pyc | Bin 1803 -> 0 bytes .../__pycache__/lovelace.cpython-38.pyc | Bin 2460 -> 0 bytes .../styles/__pycache__/manni.cpython-38.pyc | Bin 2173 -> 0 bytes .../styles/__pycache__/monokai.cpython-38.pyc | Bin 2330 -> 0 bytes .../styles/__pycache__/murphy.cpython-38.pyc | Bin 2132 -> 0 bytes .../styles/__pycache__/native.cpython-38.pyc | Bin 1804 -> 0 bytes .../__pycache__/paraiso_dark.cpython-38.pyc | Bin 2647 -> 0 bytes .../__pycache__/paraiso_light.cpython-38.pyc | Bin 2652 -> 0 bytes .../styles/__pycache__/pastie.cpython-38.pyc | Bin 2053 -> 0 bytes .../styles/__pycache__/perldoc.cpython-38.pyc | Bin 1867 -> 0 bytes .../__pycache__/rainbow_dash.cpython-38.pyc | Bin 2305 -> 0 bytes .../styles/__pycache__/rrt.cpython-38.pyc | Bin 1054 -> 0 bytes .../styles/__pycache__/sas.cpython-38.pyc | Bin 1508 -> 0 bytes .../__pycache__/solarized.cpython-38.pyc | Bin 2889 -> 0 bytes .../__pycache__/stata_dark.cpython-38.pyc | Bin 1366 -> 0 bytes .../__pycache__/stata_light.cpython-38.pyc | Bin 1392 -> 0 bytes .../styles/__pycache__/tango.cpython-38.pyc | Bin 3695 -> 0 bytes .../styles/__pycache__/trac.cpython-38.pyc | Bin 1689 -> 0 bytes .../styles/__pycache__/vim.cpython-38.pyc | Bin 1631 -> 0 bytes .../styles/__pycache__/vs.cpython-38.pyc | Bin 1094 -> 0 bytes .../styles/__pycache__/xcode.cpython-38.pyc | Bin 1260 -> 0 bytes .../site-packages/pygments/styles/abap.py | 29 - .../site-packages/pygments/styles/algol.py | 63 - .../site-packages/pygments/styles/algol_nu.py | 63 - .../site-packages/pygments/styles/arduino.py | 98 - .../site-packages/pygments/styles/autumn.py | 65 - .../site-packages/pygments/styles/borland.py | 51 - .../site-packages/pygments/styles/bw.py | 49 - .../site-packages/pygments/styles/colorful.py | 81 - .../site-packages/pygments/styles/default.py | 73 - .../site-packages/pygments/styles/emacs.py | 72 - .../site-packages/pygments/styles/friendly.py | 72 - .../site-packages/pygments/styles/fruity.py | 42 - .../site-packages/pygments/styles/igor.py | 29 - .../site-packages/pygments/styles/inkpot.py | 67 - .../site-packages/pygments/styles/lovelace.py | 97 - .../site-packages/pygments/styles/manni.py | 75 - .../site-packages/pygments/styles/monokai.py | 107 - .../site-packages/pygments/styles/murphy.py | 80 - .../site-packages/pygments/styles/native.py | 65 - .../pygments/styles/paraiso_dark.py | 125 - .../pygments/styles/paraiso_light.py | 125 - .../site-packages/pygments/styles/pastie.py | 75 - .../site-packages/pygments/styles/perldoc.py | 69 - .../pygments/styles/rainbow_dash.py | 89 - .../site-packages/pygments/styles/rrt.py | 33 - .../site-packages/pygments/styles/sas.py | 44 - .../pygments/styles/solarized.py | 130 - .../pygments/styles/stata_dark.py | 41 - .../pygments/styles/stata_light.py | 39 - .../site-packages/pygments/styles/tango.py | 141 - .../site-packages/pygments/styles/trac.py | 63 - .../site-packages/pygments/styles/vim.py | 63 - .../site-packages/pygments/styles/vs.py | 38 - .../site-packages/pygments/styles/xcode.py | 51 - .../python3.8/site-packages/pygments/token.py | 213 - .../site-packages/pygments/unistring.py | 221 - .../python3.8/site-packages/pygments/util.py | 388 - .../python_dateutil-2.8.1.dist-info/INSTALLER | 1 - .../python_dateutil-2.8.1.dist-info/LICENSE | 54 - .../python_dateutil-2.8.1.dist-info/METADATA | 200 - .../python_dateutil-2.8.1.dist-info/RECORD | 44 - .../python_dateutil-2.8.1.dist-info/WHEEL | 6 - .../top_level.txt | 1 - .../python_dateutil-2.8.1.dist-info/zip-safe | 1 - .../pytz-2019.3.dist-info/DESCRIPTION.rst | 584 -- .../pytz-2019.3.dist-info/INSTALLER | 1 - .../pytz-2019.3.dist-info/LICENSE.txt | 19 - .../pytz-2019.3.dist-info/METADATA | 618 -- .../pytz-2019.3.dist-info/RECORD | 620 -- .../site-packages/pytz-2019.3.dist-info/WHEEL | 6 - .../pytz-2019.3.dist-info/metadata.json | 1 - .../pytz-2019.3.dist-info/top_level.txt | 1 - .../pytz-2019.3.dist-info/zip-safe | 1 - .../python3.8/site-packages/pytz/__init__.py | 1551 ---- .../pytz/__pycache__/__init__.cpython-38.pyc | Bin 29439 -> 0 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 1799 -> 0 bytes .../pytz/__pycache__/lazy.cpython-38.pyc | Bin 5019 -> 0 bytes .../pytz/__pycache__/reference.cpython-38.pyc | Bin 3887 -> 0 bytes .../pytz/__pycache__/tzfile.cpython-38.pyc | Bin 3109 -> 0 bytes .../pytz/__pycache__/tzinfo.cpython-38.pyc | Bin 14882 -> 0 bytes .../site-packages/pytz/exceptions.py | 48 - .../lib/python3.8/site-packages/pytz/lazy.py | 172 - .../python3.8/site-packages/pytz/reference.py | 140 - .../python3.8/site-packages/pytz/tzfile.py | 134 - .../python3.8/site-packages/pytz/tzinfo.py | 577 -- .../pytz/zoneinfo/Africa/Abidjan | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Accra | Bin 816 -> 0 bytes .../pytz/zoneinfo/Africa/Addis_Ababa | Bin 251 -> 0 bytes .../pytz/zoneinfo/Africa/Algiers | Bin 735 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Asmara | Bin 251 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Asmera | Bin 251 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Bamako | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Bangui | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Banjul | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Bissau | Bin 194 -> 0 bytes .../pytz/zoneinfo/Africa/Blantyre | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Brazzaville | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Bujumbura | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Cairo | Bin 1955 -> 0 bytes .../pytz/zoneinfo/Africa/Casablanca | Bin 2429 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Ceuta | Bin 2036 -> 0 bytes .../pytz/zoneinfo/Africa/Conakry | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Dakar | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Dar_es_Salaam | Bin 251 -> 0 bytes .../pytz/zoneinfo/Africa/Djibouti | Bin 251 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Douala | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/El_Aaiun | Bin 2295 -> 0 bytes .../pytz/zoneinfo/Africa/Freetown | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Gaborone | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Harare | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Johannesburg | Bin 246 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Juba | Bin 653 -> 0 bytes .../pytz/zoneinfo/Africa/Kampala | Bin 251 -> 0 bytes .../pytz/zoneinfo/Africa/Khartoum | Bin 679 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Kigali | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Kinshasa | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Lagos | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Libreville | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Lome | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Luanda | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Lubumbashi | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Lusaka | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Malabo | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Maputo | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Maseru | Bin 246 -> 0 bytes .../pytz/zoneinfo/Africa/Mbabane | Bin 246 -> 0 bytes .../pytz/zoneinfo/Africa/Mogadishu | Bin 251 -> 0 bytes .../pytz/zoneinfo/Africa/Monrovia | Bin 208 -> 0 bytes .../pytz/zoneinfo/Africa/Nairobi | Bin 251 -> 0 bytes .../pytz/zoneinfo/Africa/Ndjamena | Bin 199 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Niamey | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Nouakchott | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Ouagadougou | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Porto-Novo | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Sao_Tome | Bin 254 -> 0 bytes .../pytz/zoneinfo/Africa/Timbuktu | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Tripoli | Bin 625 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Tunis | Bin 689 -> 0 bytes .../pytz/zoneinfo/Africa/Windhoek | Bin 955 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Adak | Bin 2356 -> 0 bytes .../pytz/zoneinfo/America/Anchorage | Bin 2371 -> 0 bytes .../pytz/zoneinfo/America/Anguilla | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Antigua | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Araguaina | Bin 884 -> 0 bytes .../zoneinfo/America/Argentina/Buenos_Aires | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Catamarca | Bin 1076 -> 0 bytes .../zoneinfo/America/Argentina/ComodRivadavia | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Cordoba | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Jujuy | Bin 1048 -> 0 bytes .../pytz/zoneinfo/America/Argentina/La_Rioja | Bin 1090 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Mendoza | Bin 1076 -> 0 bytes .../zoneinfo/America/Argentina/Rio_Gallegos | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Salta | Bin 1048 -> 0 bytes .../pytz/zoneinfo/America/Argentina/San_Juan | Bin 1090 -> 0 bytes .../pytz/zoneinfo/America/Argentina/San_Luis | Bin 1102 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Tucuman | Bin 1104 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Ushuaia | Bin 1076 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Aruba | Bin 186 -> 0 bytes .../pytz/zoneinfo/America/Asuncion | Bin 2044 -> 0 bytes .../pytz/zoneinfo/America/Atikokan | Bin 336 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Atka | Bin 2356 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Bahia | Bin 1024 -> 0 bytes .../pytz/zoneinfo/America/Bahia_Banderas | Bin 1546 -> 0 bytes .../pytz/zoneinfo/America/Barbados | Bin 314 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Belem | Bin 576 -> 0 bytes .../pytz/zoneinfo/America/Belize | Bin 948 -> 0 bytes .../pytz/zoneinfo/America/Blanc-Sablon | Bin 298 -> 0 bytes .../pytz/zoneinfo/America/Boa_Vista | Bin 632 -> 0 bytes .../pytz/zoneinfo/America/Bogota | Bin 246 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Boise | Bin 2394 -> 0 bytes .../pytz/zoneinfo/America/Buenos_Aires | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Cambridge_Bay | Bin 2084 -> 0 bytes .../pytz/zoneinfo/America/Campo_Grande | Bin 1444 -> 0 bytes .../pytz/zoneinfo/America/Cancun | Bin 782 -> 0 bytes .../pytz/zoneinfo/America/Caracas | Bin 264 -> 0 bytes .../pytz/zoneinfo/America/Catamarca | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Cayenne | Bin 198 -> 0 bytes .../pytz/zoneinfo/America/Cayman | Bin 182 -> 0 bytes .../pytz/zoneinfo/America/Chicago | Bin 3576 -> 0 bytes .../pytz/zoneinfo/America/Chihuahua | Bin 1484 -> 0 bytes .../pytz/zoneinfo/America/Coral_Harbour | Bin 336 -> 0 bytes .../pytz/zoneinfo/America/Cordoba | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Costa_Rica | Bin 316 -> 0 bytes .../pytz/zoneinfo/America/Creston | Bin 208 -> 0 bytes .../pytz/zoneinfo/America/Cuiaba | Bin 1416 -> 0 bytes .../pytz/zoneinfo/America/Curacao | Bin 186 -> 0 bytes .../pytz/zoneinfo/America/Danmarkshavn | Bin 698 -> 0 bytes .../pytz/zoneinfo/America/Dawson | Bin 2084 -> 0 bytes .../pytz/zoneinfo/America/Dawson_Creek | Bin 1050 -> 0 bytes .../pytz/zoneinfo/America/Denver | Bin 2444 -> 0 bytes .../pytz/zoneinfo/America/Detroit | Bin 2230 -> 0 bytes .../pytz/zoneinfo/America/Dominica | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Edmonton | Bin 2332 -> 0 bytes .../pytz/zoneinfo/America/Eirunepe | Bin 656 -> 0 bytes .../pytz/zoneinfo/America/El_Salvador | Bin 224 -> 0 bytes .../pytz/zoneinfo/America/Ensenada | Bin 2342 -> 0 bytes .../pytz/zoneinfo/America/Fort_Nelson | Bin 2240 -> 0 bytes .../pytz/zoneinfo/America/Fort_Wayne | Bin 1666 -> 0 bytes .../pytz/zoneinfo/America/Fortaleza | Bin 716 -> 0 bytes .../pytz/zoneinfo/America/Glace_Bay | Bin 2192 -> 0 bytes .../pytz/zoneinfo/America/Godthab | Bin 1878 -> 0 bytes .../pytz/zoneinfo/America/Goose_Bay | Bin 3210 -> 0 bytes .../pytz/zoneinfo/America/Grand_Turk | Bin 1848 -> 0 bytes .../pytz/zoneinfo/America/Grenada | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Guadeloupe | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Guatemala | Bin 280 -> 0 bytes .../pytz/zoneinfo/America/Guayaquil | Bin 246 -> 0 bytes .../pytz/zoneinfo/America/Guyana | Bin 236 -> 0 bytes .../pytz/zoneinfo/America/Halifax | Bin 3424 -> 0 bytes .../pytz/zoneinfo/America/Havana | Bin 2416 -> 0 bytes .../pytz/zoneinfo/America/Hermosillo | Bin 416 -> 0 bytes .../zoneinfo/America/Indiana/Indianapolis | Bin 1666 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Knox | Bin 2428 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Marengo | Bin 1722 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Petersburg | Bin 1904 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Tell_City | Bin 1684 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Vevay | Bin 1414 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Vincennes | Bin 1694 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Winamac | Bin 1778 -> 0 bytes .../pytz/zoneinfo/America/Indianapolis | Bin 1666 -> 0 bytes .../pytz/zoneinfo/America/Inuvik | Bin 1894 -> 0 bytes .../pytz/zoneinfo/America/Iqaluit | Bin 2032 -> 0 bytes .../pytz/zoneinfo/America/Jamaica | Bin 482 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Jujuy | Bin 1048 -> 0 bytes .../pytz/zoneinfo/America/Juneau | Bin 2353 -> 0 bytes .../pytz/zoneinfo/America/Kentucky/Louisville | Bin 2772 -> 0 bytes .../pytz/zoneinfo/America/Kentucky/Monticello | Bin 2352 -> 0 bytes .../pytz/zoneinfo/America/Knox_IN | Bin 2428 -> 0 bytes .../pytz/zoneinfo/America/Kralendijk | Bin 186 -> 0 bytes .../pytz/zoneinfo/America/La_Paz | Bin 232 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Lima | Bin 406 -> 0 bytes .../pytz/zoneinfo/America/Los_Angeles | Bin 2836 -> 0 bytes .../pytz/zoneinfo/America/Louisville | Bin 2772 -> 0 bytes .../pytz/zoneinfo/America/Lower_Princes | Bin 186 -> 0 bytes .../pytz/zoneinfo/America/Maceio | Bin 744 -> 0 bytes .../pytz/zoneinfo/America/Managua | Bin 430 -> 0 bytes .../pytz/zoneinfo/America/Manaus | Bin 604 -> 0 bytes .../pytz/zoneinfo/America/Marigot | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Martinique | Bin 232 -> 0 bytes .../pytz/zoneinfo/America/Matamoros | Bin 1390 -> 0 bytes .../pytz/zoneinfo/America/Mazatlan | Bin 1526 -> 0 bytes .../pytz/zoneinfo/America/Mendoza | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Menominee | Bin 2274 -> 0 bytes .../pytz/zoneinfo/America/Merida | Bin 1422 -> 0 bytes .../pytz/zoneinfo/America/Metlakatla | Bin 1423 -> 0 bytes .../pytz/zoneinfo/America/Mexico_City | Bin 1584 -> 0 bytes .../pytz/zoneinfo/America/Miquelon | Bin 1666 -> 0 bytes .../pytz/zoneinfo/America/Moncton | Bin 3154 -> 0 bytes .../pytz/zoneinfo/America/Monterrey | Bin 1390 -> 0 bytes .../pytz/zoneinfo/America/Montevideo | Bin 1510 -> 0 bytes .../pytz/zoneinfo/America/Montreal | Bin 3494 -> 0 bytes .../pytz/zoneinfo/America/Montserrat | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Nassau | Bin 2258 -> 0 bytes .../pytz/zoneinfo/America/New_York | Bin 3536 -> 0 bytes .../pytz/zoneinfo/America/Nipigon | Bin 2122 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Nome | Bin 2367 -> 0 bytes .../pytz/zoneinfo/America/Noronha | Bin 716 -> 0 bytes .../pytz/zoneinfo/America/North_Dakota/Beulah | Bin 2380 -> 0 bytes .../pytz/zoneinfo/America/North_Dakota/Center | Bin 2380 -> 0 bytes .../zoneinfo/America/North_Dakota/New_Salem | Bin 2380 -> 0 bytes .../pytz/zoneinfo/America/Ojinaga | Bin 1484 -> 0 bytes .../pytz/zoneinfo/America/Panama | Bin 182 -> 0 bytes .../pytz/zoneinfo/America/Pangnirtung | Bin 2094 -> 0 bytes .../pytz/zoneinfo/America/Paramaribo | Bin 262 -> 0 bytes .../pytz/zoneinfo/America/Phoenix | Bin 328 -> 0 bytes .../pytz/zoneinfo/America/Port-au-Prince | Bin 1434 -> 0 bytes .../pytz/zoneinfo/America/Port_of_Spain | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Porto_Acre | Bin 628 -> 0 bytes .../pytz/zoneinfo/America/Porto_Velho | Bin 576 -> 0 bytes .../pytz/zoneinfo/America/Puerto_Rico | Bin 246 -> 0 bytes .../pytz/zoneinfo/America/Punta_Arenas | Bin 1902 -> 0 bytes .../pytz/zoneinfo/America/Rainy_River | Bin 2122 -> 0 bytes .../pytz/zoneinfo/America/Rankin_Inlet | Bin 1892 -> 0 bytes .../pytz/zoneinfo/America/Recife | Bin 716 -> 0 bytes .../pytz/zoneinfo/America/Regina | Bin 980 -> 0 bytes .../pytz/zoneinfo/America/Resolute | Bin 1892 -> 0 bytes .../pytz/zoneinfo/America/Rio_Branco | Bin 628 -> 0 bytes .../pytz/zoneinfo/America/Rosario | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Santa_Isabel | Bin 2342 -> 0 bytes .../pytz/zoneinfo/America/Santarem | Bin 602 -> 0 bytes .../pytz/zoneinfo/America/Santiago | Bin 2529 -> 0 bytes .../pytz/zoneinfo/America/Santo_Domingo | Bin 458 -> 0 bytes .../pytz/zoneinfo/America/Sao_Paulo | Bin 1444 -> 0 bytes .../pytz/zoneinfo/America/Scoresbysund | Bin 1916 -> 0 bytes .../pytz/zoneinfo/America/Shiprock | Bin 2444 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Sitka | Bin 2329 -> 0 bytes .../pytz/zoneinfo/America/St_Barthelemy | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/St_Johns | Bin 3655 -> 0 bytes .../pytz/zoneinfo/America/St_Kitts | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/St_Lucia | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/St_Thomas | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/St_Vincent | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Swift_Current | Bin 560 -> 0 bytes .../pytz/zoneinfo/America/Tegucigalpa | Bin 252 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Thule | Bin 1502 -> 0 bytes .../pytz/zoneinfo/America/Thunder_Bay | Bin 2202 -> 0 bytes .../pytz/zoneinfo/America/Tijuana | Bin 2342 -> 0 bytes .../pytz/zoneinfo/America/Toronto | Bin 3494 -> 0 bytes .../pytz/zoneinfo/America/Tortola | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Vancouver | Bin 2892 -> 0 bytes .../pytz/zoneinfo/America/Virgin | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Whitehorse | Bin 2084 -> 0 bytes .../pytz/zoneinfo/America/Winnipeg | Bin 2868 -> 0 bytes .../pytz/zoneinfo/America/Yakutat | Bin 2305 -> 0 bytes .../pytz/zoneinfo/America/Yellowknife | Bin 1966 -> 0 bytes .../pytz/zoneinfo/Antarctica/Casey | Bin 297 -> 0 bytes .../pytz/zoneinfo/Antarctica/Davis | Bin 297 -> 0 bytes .../pytz/zoneinfo/Antarctica/DumontDUrville | Bin 194 -> 0 bytes .../pytz/zoneinfo/Antarctica/Macquarie | Bin 1520 -> 0 bytes .../pytz/zoneinfo/Antarctica/Mawson | Bin 199 -> 0 bytes .../pytz/zoneinfo/Antarctica/McMurdo | Bin 2437 -> 0 bytes .../pytz/zoneinfo/Antarctica/Palmer | Bin 1418 -> 0 bytes .../pytz/zoneinfo/Antarctica/Rothera | Bin 164 -> 0 bytes .../pytz/zoneinfo/Antarctica/South_Pole | Bin 2437 -> 0 bytes .../pytz/zoneinfo/Antarctica/Syowa | Bin 165 -> 0 bytes .../pytz/zoneinfo/Antarctica/Troll | Bin 1162 -> 0 bytes .../pytz/zoneinfo/Antarctica/Vostok | Bin 165 -> 0 bytes .../pytz/zoneinfo/Arctic/Longyearbyen | Bin 2228 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Aden | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Almaty | Bin 997 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Amman | Bin 1853 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Anadyr | Bin 1188 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Aqtau | Bin 983 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Aqtobe | Bin 1011 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Ashgabat | Bin 619 -> 0 bytes .../pytz/zoneinfo/Asia/Ashkhabad | Bin 619 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Atyrau | Bin 991 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Baghdad | Bin 983 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Bahrain | Bin 199 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Baku | Bin 1227 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Bangkok | Bin 199 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Barnaul | Bin 1221 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Beirut | Bin 2154 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Bishkek | Bin 983 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Brunei | Bin 203 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Calcutta | Bin 285 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Chita | Bin 1221 -> 0 bytes .../pytz/zoneinfo/Asia/Choibalsan | Bin 949 -> 0 bytes .../pytz/zoneinfo/Asia/Chongqing | Bin 533 -> 0 bytes .../pytz/zoneinfo/Asia/Chungking | Bin 533 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Colombo | Bin 372 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dacca | Bin 337 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Damascus | Bin 2294 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dhaka | Bin 337 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dili | Bin 227 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dubai | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dushanbe | Bin 591 -> 0 bytes .../pytz/zoneinfo/Asia/Famagusta | Bin 2028 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Gaza | Bin 2316 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Harbin | Bin 533 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Hebron | Bin 2344 -> 0 bytes .../pytz/zoneinfo/Asia/Ho_Chi_Minh | Bin 351 -> 0 bytes .../pytz/zoneinfo/Asia/Hong_Kong | Bin 1203 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Hovd | Bin 891 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Irkutsk | Bin 1243 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Istanbul | Bin 1947 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Jakarta | Bin 355 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Jayapura | Bin 221 -> 0 bytes .../pytz/zoneinfo/Asia/Jerusalem | Bin 2288 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kabul | Bin 208 -> 0 bytes .../pytz/zoneinfo/Asia/Kamchatka | Bin 1166 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Karachi | Bin 379 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kashgar | Bin 165 -> 0 bytes .../pytz/zoneinfo/Asia/Kathmandu | Bin 212 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Katmandu | Bin 212 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Khandyga | Bin 1271 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kolkata | Bin 285 -> 0 bytes .../pytz/zoneinfo/Asia/Krasnoyarsk | Bin 1207 -> 0 bytes .../pytz/zoneinfo/Asia/Kuala_Lumpur | Bin 383 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kuching | Bin 483 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kuwait | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Macao | Bin 1227 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Macau | Bin 1227 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Magadan | Bin 1222 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Makassar | Bin 254 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Manila | Bin 328 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Muscat | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Nicosia | Bin 2002 -> 0 bytes .../pytz/zoneinfo/Asia/Novokuznetsk | Bin 1165 -> 0 bytes .../pytz/zoneinfo/Asia/Novosibirsk | Bin 1221 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Omsk | Bin 1207 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Oral | Bin 1005 -> 0 bytes .../pytz/zoneinfo/Asia/Phnom_Penh | Bin 199 -> 0 bytes .../pytz/zoneinfo/Asia/Pontianak | Bin 353 -> 0 bytes .../pytz/zoneinfo/Asia/Pyongyang | Bin 237 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Qatar | Bin 199 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Qostanay | Bin 1011 -> 0 bytes .../pytz/zoneinfo/Asia/Qyzylorda | Bin 1025 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Rangoon | Bin 268 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Riyadh | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Saigon | Bin 351 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Sakhalin | Bin 1202 -> 0 bytes .../pytz/zoneinfo/Asia/Samarkand | Bin 577 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Seoul | Bin 617 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Shanghai | Bin 533 -> 0 bytes .../pytz/zoneinfo/Asia/Singapore | Bin 383 -> 0 bytes .../pytz/zoneinfo/Asia/Srednekolymsk | Bin 1208 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Taipei | Bin 761 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tashkent | Bin 591 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tbilisi | Bin 1035 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tehran | Bin 2582 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tel_Aviv | Bin 2288 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Thimbu | Bin 203 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Thimphu | Bin 203 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tokyo | Bin 309 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tomsk | Bin 1221 -> 0 bytes .../pytz/zoneinfo/Asia/Ujung_Pandang | Bin 254 -> 0 bytes .../pytz/zoneinfo/Asia/Ulaanbaatar | Bin 891 -> 0 bytes .../pytz/zoneinfo/Asia/Ulan_Bator | Bin 891 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Urumqi | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Ust-Nera | Bin 1252 -> 0 bytes .../pytz/zoneinfo/Asia/Vientiane | Bin 199 -> 0 bytes .../pytz/zoneinfo/Asia/Vladivostok | Bin 1208 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Yakutsk | Bin 1207 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Yangon | Bin 268 -> 0 bytes .../pytz/zoneinfo/Asia/Yekaterinburg | Bin 1243 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Yerevan | Bin 1151 -> 0 bytes .../pytz/zoneinfo/Atlantic/Azores | Bin 3484 -> 0 bytes .../pytz/zoneinfo/Atlantic/Bermuda | Bin 1978 -> 0 bytes .../pytz/zoneinfo/Atlantic/Canary | Bin 1897 -> 0 bytes .../pytz/zoneinfo/Atlantic/Cape_Verde | Bin 270 -> 0 bytes .../pytz/zoneinfo/Atlantic/Faeroe | Bin 1815 -> 0 bytes .../pytz/zoneinfo/Atlantic/Faroe | Bin 1815 -> 0 bytes .../pytz/zoneinfo/Atlantic/Jan_Mayen | Bin 2228 -> 0 bytes .../pytz/zoneinfo/Atlantic/Madeira | Bin 3475 -> 0 bytes .../pytz/zoneinfo/Atlantic/Reykjavik | Bin 1162 -> 0 bytes .../pytz/zoneinfo/Atlantic/South_Georgia | Bin 164 -> 0 bytes .../pytz/zoneinfo/Atlantic/St_Helena | Bin 148 -> 0 bytes .../pytz/zoneinfo/Atlantic/Stanley | Bin 1214 -> 0 bytes .../site-packages/pytz/zoneinfo/Australia/ACT | Bin 2204 -> 0 bytes .../pytz/zoneinfo/Australia/Adelaide | Bin 2222 -> 0 bytes .../pytz/zoneinfo/Australia/Brisbane | Bin 433 -> 0 bytes .../pytz/zoneinfo/Australia/Broken_Hill | Bin 2243 -> 0 bytes .../pytz/zoneinfo/Australia/Canberra | Bin 2204 -> 0 bytes .../pytz/zoneinfo/Australia/Currie | Bin 2204 -> 0 bytes .../pytz/zoneinfo/Australia/Darwin | Bin 304 -> 0 bytes .../pytz/zoneinfo/Australia/Eucla | Bin 484 -> 0 bytes .../pytz/zoneinfo/Australia/Hobart | Bin 2316 -> 0 bytes .../site-packages/pytz/zoneinfo/Australia/LHI | Bin 1860 -> 0 bytes .../pytz/zoneinfo/Australia/Lindeman | Bin 489 -> 0 bytes .../pytz/zoneinfo/Australia/Lord_Howe | Bin 1860 -> 0 bytes .../pytz/zoneinfo/Australia/Melbourne | Bin 2204 -> 0 bytes .../site-packages/pytz/zoneinfo/Australia/NSW | Bin 2204 -> 0 bytes .../pytz/zoneinfo/Australia/North | Bin 304 -> 0 bytes .../pytz/zoneinfo/Australia/Perth | Bin 460 -> 0 bytes .../pytz/zoneinfo/Australia/Queensland | Bin 433 -> 0 bytes .../pytz/zoneinfo/Australia/South | Bin 2222 -> 0 bytes .../pytz/zoneinfo/Australia/Sydney | Bin 2204 -> 0 bytes .../pytz/zoneinfo/Australia/Tasmania | Bin 2316 -> 0 bytes .../pytz/zoneinfo/Australia/Victoria | Bin 2204 -> 0 bytes .../pytz/zoneinfo/Australia/West | Bin 460 -> 0 bytes .../pytz/zoneinfo/Australia/Yancowinna | Bin 2243 -> 0 bytes .../site-packages/pytz/zoneinfo/Brazil/Acre | Bin 628 -> 0 bytes .../pytz/zoneinfo/Brazil/DeNoronha | Bin 716 -> 0 bytes .../site-packages/pytz/zoneinfo/Brazil/East | Bin 1444 -> 0 bytes .../site-packages/pytz/zoneinfo/Brazil/West | Bin 604 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/CET | Bin 2094 -> 0 bytes .../site-packages/pytz/zoneinfo/CST6CDT | Bin 2310 -> 0 bytes .../pytz/zoneinfo/Canada/Atlantic | Bin 3424 -> 0 bytes .../pytz/zoneinfo/Canada/Central | Bin 2868 -> 0 bytes .../pytz/zoneinfo/Canada/Eastern | Bin 3494 -> 0 bytes .../pytz/zoneinfo/Canada/Mountain | Bin 2332 -> 0 bytes .../pytz/zoneinfo/Canada/Newfoundland | Bin 3655 -> 0 bytes .../pytz/zoneinfo/Canada/Pacific | Bin 2892 -> 0 bytes .../pytz/zoneinfo/Canada/Saskatchewan | Bin 980 -> 0 bytes .../site-packages/pytz/zoneinfo/Canada/Yukon | Bin 2084 -> 0 bytes .../pytz/zoneinfo/Chile/Continental | Bin 2529 -> 0 bytes .../pytz/zoneinfo/Chile/EasterIsland | Bin 2233 -> 0 bytes .../site-packages/pytz/zoneinfo/Cuba | Bin 2416 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/EET | Bin 1908 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/EST | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/EST5EDT | Bin 2310 -> 0 bytes .../site-packages/pytz/zoneinfo/Egypt | Bin 1955 -> 0 bytes .../site-packages/pytz/zoneinfo/Eire | Bin 3492 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+0 | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+1 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+10 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+11 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+12 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+2 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+3 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+4 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+5 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+6 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+7 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+8 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+9 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-0 | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-1 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-10 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-11 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-12 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-13 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-14 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-2 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-3 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-4 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-5 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-6 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-7 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-8 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-9 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT0 | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/Greenwich | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/UCT | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/UTC | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/Universal | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/Zulu | Bin 114 -> 0 bytes .../pytz/zoneinfo/Europe/Amsterdam | Bin 2910 -> 0 bytes .../pytz/zoneinfo/Europe/Andorra | Bin 1742 -> 0 bytes .../pytz/zoneinfo/Europe/Astrakhan | Bin 1165 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Athens | Bin 2262 -> 0 bytes .../pytz/zoneinfo/Europe/Belfast | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Belgrade | Bin 1920 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Berlin | Bin 2298 -> 0 bytes .../pytz/zoneinfo/Europe/Bratislava | Bin 2301 -> 0 bytes .../pytz/zoneinfo/Europe/Brussels | Bin 2933 -> 0 bytes .../pytz/zoneinfo/Europe/Bucharest | Bin 2184 -> 0 bytes .../pytz/zoneinfo/Europe/Budapest | Bin 2368 -> 0 bytes .../pytz/zoneinfo/Europe/Busingen | Bin 1909 -> 0 bytes .../pytz/zoneinfo/Europe/Chisinau | Bin 2390 -> 0 bytes .../pytz/zoneinfo/Europe/Copenhagen | Bin 2137 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Dublin | Bin 3492 -> 0 bytes .../pytz/zoneinfo/Europe/Gibraltar | Bin 3052 -> 0 bytes .../pytz/zoneinfo/Europe/Guernsey | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Helsinki | Bin 1900 -> 0 bytes .../pytz/zoneinfo/Europe/Isle_of_Man | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Istanbul | Bin 1947 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Jersey | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Kaliningrad | Bin 1493 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Kiev | Bin 2088 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Kirov | Bin 1153 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Lisbon | Bin 3469 -> 0 bytes .../pytz/zoneinfo/Europe/Ljubljana | Bin 1920 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/London | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Luxembourg | Bin 2946 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Madrid | Bin 2614 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Malta | Bin 2620 -> 0 bytes .../pytz/zoneinfo/Europe/Mariehamn | Bin 1900 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Minsk | Bin 1321 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Monaco | Bin 2944 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Moscow | Bin 1535 -> 0 bytes .../pytz/zoneinfo/Europe/Nicosia | Bin 2002 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Oslo | Bin 2228 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Paris | Bin 2962 -> 0 bytes .../pytz/zoneinfo/Europe/Podgorica | Bin 1920 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Prague | Bin 2301 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Riga | Bin 2198 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Rome | Bin 2641 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Samara | Bin 1215 -> 0 bytes .../pytz/zoneinfo/Europe/San_Marino | Bin 2641 -> 0 bytes .../pytz/zoneinfo/Europe/Sarajevo | Bin 1920 -> 0 bytes .../pytz/zoneinfo/Europe/Saratov | Bin 1183 -> 0 bytes .../pytz/zoneinfo/Europe/Simferopol | Bin 1453 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Skopje | Bin 1920 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Sofia | Bin 2077 -> 0 bytes .../pytz/zoneinfo/Europe/Stockholm | Bin 1909 -> 0 bytes .../pytz/zoneinfo/Europe/Tallinn | Bin 2148 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Tirane | Bin 2084 -> 0 bytes .../pytz/zoneinfo/Europe/Tiraspol | Bin 2390 -> 0 bytes .../pytz/zoneinfo/Europe/Ulyanovsk | Bin 1267 -> 0 bytes .../pytz/zoneinfo/Europe/Uzhgorod | Bin 2050 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Vaduz | Bin 1909 -> 0 bytes .../pytz/zoneinfo/Europe/Vatican | Bin 2641 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Vienna | Bin 2200 -> 0 bytes .../pytz/zoneinfo/Europe/Vilnius | Bin 2162 -> 0 bytes .../pytz/zoneinfo/Europe/Volgograd | Bin 1165 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Warsaw | Bin 2654 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Zagreb | Bin 1920 -> 0 bytes .../pytz/zoneinfo/Europe/Zaporozhye | Bin 2106 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Zurich | Bin 1909 -> 0 bytes .../site-packages/pytz/zoneinfo/Factory | Bin 116 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/GB | Bin 3648 -> 0 bytes .../site-packages/pytz/zoneinfo/GB-Eire | Bin 3648 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/GMT | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/GMT+0 | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/GMT-0 | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/GMT0 | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Greenwich | Bin 114 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/HST | Bin 115 -> 0 bytes .../site-packages/pytz/zoneinfo/Hongkong | Bin 1203 -> 0 bytes .../site-packages/pytz/zoneinfo/Iceland | Bin 1162 -> 0 bytes .../pytz/zoneinfo/Indian/Antananarivo | Bin 251 -> 0 bytes .../site-packages/pytz/zoneinfo/Indian/Chagos | Bin 199 -> 0 bytes .../pytz/zoneinfo/Indian/Christmas | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Indian/Cocos | Bin 174 -> 0 bytes .../site-packages/pytz/zoneinfo/Indian/Comoro | Bin 251 -> 0 bytes .../pytz/zoneinfo/Indian/Kerguelen | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Indian/Mahe | Bin 165 -> 0 bytes .../pytz/zoneinfo/Indian/Maldives | Bin 199 -> 0 bytes .../pytz/zoneinfo/Indian/Mauritius | Bin 241 -> 0 bytes .../pytz/zoneinfo/Indian/Mayotte | Bin 251 -> 0 bytes .../pytz/zoneinfo/Indian/Reunion | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Iran | Bin 2582 -> 0 bytes .../site-packages/pytz/zoneinfo/Israel | Bin 2288 -> 0 bytes .../site-packages/pytz/zoneinfo/Jamaica | Bin 482 -> 0 bytes .../site-packages/pytz/zoneinfo/Japan | Bin 309 -> 0 bytes .../site-packages/pytz/zoneinfo/Kwajalein | Bin 316 -> 0 bytes .../site-packages/pytz/zoneinfo/Libya | Bin 625 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/MET | Bin 2094 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/MST | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/MST7MDT | Bin 2310 -> 0 bytes .../pytz/zoneinfo/Mexico/BajaNorte | Bin 2342 -> 0 bytes .../pytz/zoneinfo/Mexico/BajaSur | Bin 1526 -> 0 bytes .../pytz/zoneinfo/Mexico/General | Bin 1584 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/NZ | Bin 2437 -> 0 bytes .../site-packages/pytz/zoneinfo/NZ-CHAT | Bin 2068 -> 0 bytes .../site-packages/pytz/zoneinfo/Navajo | Bin 2444 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/PRC | Bin 533 -> 0 bytes .../site-packages/pytz/zoneinfo/PST8PDT | Bin 2310 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Apia | Bin 1097 -> 0 bytes .../pytz/zoneinfo/Pacific/Auckland | Bin 2437 -> 0 bytes .../pytz/zoneinfo/Pacific/Bougainville | Bin 268 -> 0 bytes .../pytz/zoneinfo/Pacific/Chatham | Bin 2068 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Chuuk | Bin 269 -> 0 bytes .../pytz/zoneinfo/Pacific/Easter | Bin 2233 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Efate | Bin 466 -> 0 bytes .../pytz/zoneinfo/Pacific/Enderbury | Bin 234 -> 0 bytes .../pytz/zoneinfo/Pacific/Fakaofo | Bin 200 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Fiji | Bin 1077 -> 0 bytes .../pytz/zoneinfo/Pacific/Funafuti | Bin 166 -> 0 bytes .../pytz/zoneinfo/Pacific/Galapagos | Bin 238 -> 0 bytes .../pytz/zoneinfo/Pacific/Gambier | Bin 164 -> 0 bytes .../pytz/zoneinfo/Pacific/Guadalcanal | Bin 166 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Guam | Bin 494 -> 0 bytes .../pytz/zoneinfo/Pacific/Honolulu | Bin 329 -> 0 bytes .../pytz/zoneinfo/Pacific/Johnston | Bin 329 -> 0 bytes .../pytz/zoneinfo/Pacific/Kiritimati | Bin 238 -> 0 bytes .../pytz/zoneinfo/Pacific/Kosrae | Bin 351 -> 0 bytes .../pytz/zoneinfo/Pacific/Kwajalein | Bin 316 -> 0 bytes .../pytz/zoneinfo/Pacific/Majuro | Bin 310 -> 0 bytes .../pytz/zoneinfo/Pacific/Marquesas | Bin 173 -> 0 bytes .../pytz/zoneinfo/Pacific/Midway | Bin 175 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Nauru | Bin 252 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Niue | Bin 241 -> 0 bytes .../pytz/zoneinfo/Pacific/Norfolk | Bin 880 -> 0 bytes .../pytz/zoneinfo/Pacific/Noumea | Bin 304 -> 0 bytes .../pytz/zoneinfo/Pacific/Pago_Pago | Bin 175 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Palau | Bin 180 -> 0 bytes .../pytz/zoneinfo/Pacific/Pitcairn | Bin 202 -> 0 bytes .../pytz/zoneinfo/Pacific/Pohnpei | Bin 303 -> 0 bytes .../pytz/zoneinfo/Pacific/Ponape | Bin 303 -> 0 bytes .../pytz/zoneinfo/Pacific/Port_Moresby | Bin 186 -> 0 bytes .../pytz/zoneinfo/Pacific/Rarotonga | Bin 577 -> 0 bytes .../pytz/zoneinfo/Pacific/Saipan | Bin 494 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Samoa | Bin 175 -> 0 bytes .../pytz/zoneinfo/Pacific/Tahiti | Bin 165 -> 0 bytes .../pytz/zoneinfo/Pacific/Tarawa | Bin 166 -> 0 bytes .../pytz/zoneinfo/Pacific/Tongatapu | Bin 372 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Truk | Bin 269 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Wake | Bin 166 -> 0 bytes .../pytz/zoneinfo/Pacific/Wallis | Bin 166 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Yap | Bin 269 -> 0 bytes .../site-packages/pytz/zoneinfo/Poland | Bin 2654 -> 0 bytes .../site-packages/pytz/zoneinfo/Portugal | Bin 3469 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/ROC | Bin 761 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/ROK | Bin 617 -> 0 bytes .../site-packages/pytz/zoneinfo/Singapore | Bin 383 -> 0 bytes .../site-packages/pytz/zoneinfo/Turkey | Bin 1947 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/UCT | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Alaska | Bin 2371 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Aleutian | Bin 2356 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Arizona | Bin 328 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Central | Bin 3576 -> 0 bytes .../pytz/zoneinfo/US/East-Indiana | Bin 1666 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Eastern | Bin 3536 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Hawaii | Bin 329 -> 0 bytes .../pytz/zoneinfo/US/Indiana-Starke | Bin 2428 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Michigan | Bin 2230 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Mountain | Bin 2444 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Pacific | Bin 2836 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Samoa | Bin 175 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/UTC | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Universal | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/W-SU | Bin 1535 -> 0 bytes .../python3.8/site-packages/pytz/zoneinfo/WET | Bin 1905 -> 0 bytes .../site-packages/pytz/zoneinfo/Zulu | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/iso3166.tab | 274 - .../site-packages/pytz/zoneinfo/leapseconds | 72 - .../site-packages/pytz/zoneinfo/posixrules | Bin 3536 -> 0 bytes .../site-packages/pytz/zoneinfo/tzdata.zi | 4405 --------- .../site-packages/pytz/zoneinfo/zone.tab | 452 - .../site-packages/pytz/zoneinfo/zone1970.tab | 384 - .../setuptools-45.2.0.dist-info/INSTALLER | 1 - .../setuptools-45.2.0.dist-info/LICENSE | 19 - .../setuptools-45.2.0.dist-info/METADATA | 102 - .../setuptools-45.2.0.dist-info/RECORD | 196 - .../setuptools-45.2.0.dist-info/WHEEL | 5 - .../dependency_links.txt | 2 - .../entry_points.txt | 69 - .../setuptools-45.2.0.dist-info/top_level.txt | 3 - .../setuptools-45.2.0.dist-info/zip-safe | 1 - .../site-packages/setuptools/__init__.py | 228 - .../__pycache__/__init__.cpython-38.pyc | Bin 7757 -> 0 bytes .../_deprecation_warning.cpython-38.pyc | Bin 520 -> 0 bytes .../__pycache__/_imp.cpython-38.pyc | Bin 2059 -> 0 bytes .../__pycache__/archive_util.cpython-38.pyc | Bin 5140 -> 0 bytes .../__pycache__/build_meta.cpython-38.pyc | Bin 8578 -> 0 bytes .../__pycache__/config.cpython-38.pyc | Bin 17900 -> 0 bytes .../__pycache__/dep_util.cpython-38.pyc | Bin 827 -> 0 bytes .../__pycache__/depends.cpython-38.pyc | Bin 5220 -> 0 bytes .../__pycache__/dist.cpython-38.pyc | Bin 42321 -> 0 bytes .../__pycache__/errors.cpython-38.pyc | Bin 820 -> 0 bytes .../__pycache__/extension.cpython-38.pyc | Bin 1965 -> 0 bytes .../__pycache__/glob.cpython-38.pyc | Bin 3737 -> 0 bytes .../__pycache__/installer.cpython-38.pyc | Bin 4106 -> 0 bytes .../__pycache__/launch.cpython-38.pyc | Bin 828 -> 0 bytes .../__pycache__/lib2to3_ex.cpython-38.pyc | Bin 2415 -> 0 bytes .../__pycache__/monkey.cpython-38.pyc | Bin 4648 -> 0 bytes .../__pycache__/msvc.cpython-38.pyc | Bin 39653 -> 0 bytes .../__pycache__/namespaces.cpython-38.pyc | Bin 3620 -> 0 bytes .../__pycache__/package_index.cpython-38.pyc | Bin 32984 -> 0 bytes .../__pycache__/py27compat.cpython-38.pyc | Bin 1753 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 1195 -> 0 bytes .../__pycache__/py33compat.cpython-38.pyc | Bin 1412 -> 0 bytes .../__pycache__/py34compat.cpython-38.pyc | Bin 454 -> 0 bytes .../__pycache__/sandbox.cpython-38.pyc | Bin 15540 -> 0 bytes .../__pycache__/site-patch.cpython-38.pyc | Bin 1486 -> 0 bytes .../__pycache__/ssl_support.cpython-38.pyc | Bin 6877 -> 0 bytes .../__pycache__/unicode_utils.cpython-38.pyc | Bin 1155 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 296 -> 0 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 7391 -> 0 bytes .../windows_support.cpython-38.pyc | Bin 993 -> 0 bytes .../setuptools/_deprecation_warning.py | 7 - .../site-packages/setuptools/_imp.py | 82 - .../setuptools/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 158 -> 0 bytes .../__pycache__/ordered_set.cpython-38.pyc | Bin 16416 -> 0 bytes .../__pycache__/pyparsing.cpython-38.pyc | Bin 201635 -> 0 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 24431 -> 0 bytes .../setuptools/_vendor/ordered_set.py | 488 - .../setuptools/_vendor/packaging/__about__.py | 27 - .../setuptools/_vendor/packaging/__init__.py | 26 - .../__pycache__/__about__.cpython-38.pyc | Bin 708 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 546 -> 0 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 982 -> 0 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2764 -> 0 bytes .../__pycache__/markers.cpython-38.pyc | Bin 8931 -> 0 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 3999 -> 0 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 19738 -> 0 bytes .../packaging/__pycache__/tags.cpython-38.pyc | Bin 10815 -> 0 bytes .../__pycache__/utils.cpython-38.pyc | Bin 1439 -> 0 bytes .../__pycache__/version.cpython-38.pyc | Bin 12069 -> 0 bytes .../setuptools/_vendor/packaging/_compat.py | 31 - .../_vendor/packaging/_structures.py | 68 - .../setuptools/_vendor/packaging/markers.py | 296 - .../_vendor/packaging/requirements.py | 138 - .../_vendor/packaging/specifiers.py | 749 -- .../setuptools/_vendor/packaging/tags.py | 404 - .../setuptools/_vendor/packaging/utils.py | 57 - .../setuptools/_vendor/packaging/version.py | 420 - .../setuptools/_vendor/pyparsing.py | 5742 ------------ .../site-packages/setuptools/_vendor/six.py | 868 -- .../site-packages/setuptools/archive_util.py | 175 - .../site-packages/setuptools/build_meta.py | 272 - .../site-packages/setuptools/cli-32.exe | Bin 65536 -> 0 bytes .../site-packages/setuptools/cli-64.exe | Bin 74752 -> 0 bytes .../site-packages/setuptools/cli.exe | Bin 65536 -> 0 bytes .../setuptools/command/__init__.py | 17 - .../__pycache__/__init__.cpython-38.pyc | Bin 716 -> 0 bytes .../command/__pycache__/alias.cpython-38.pyc | Bin 2396 -> 0 bytes .../__pycache__/bdist_egg.cpython-38.pyc | Bin 14186 -> 0 bytes .../__pycache__/bdist_rpm.cpython-38.pyc | Bin 1788 -> 0 bytes .../__pycache__/bdist_wininst.cpython-38.pyc | Bin 958 -> 0 bytes .../__pycache__/build_clib.cpython-38.pyc | Bin 2438 -> 0 bytes .../__pycache__/build_ext.cpython-38.pyc | Bin 9902 -> 0 bytes .../__pycache__/build_py.cpython-38.pyc | Bin 8645 -> 0 bytes .../__pycache__/develop.cpython-38.pyc | Bin 6505 -> 0 bytes .../__pycache__/dist_info.cpython-38.pyc | Bin 1365 -> 0 bytes .../__pycache__/easy_install.cpython-38.pyc | Bin 65284 -> 0 bytes .../__pycache__/egg_info.cpython-38.pyc | Bin 21722 -> 0 bytes .../__pycache__/install.cpython-38.pyc | Bin 4020 -> 0 bytes .../install_egg_info.cpython-38.pyc | Bin 2407 -> 0 bytes .../__pycache__/install_lib.cpython-38.pyc | Bin 4134 -> 0 bytes .../install_scripts.cpython-38.pyc | Bin 2328 -> 0 bytes .../__pycache__/py36compat.cpython-38.pyc | Bin 4614 -> 0 bytes .../__pycache__/register.cpython-38.pyc | Bin 815 -> 0 bytes .../command/__pycache__/rotate.cpython-38.pyc | Bin 2524 -> 0 bytes .../__pycache__/saveopts.cpython-38.pyc | Bin 893 -> 0 bytes .../command/__pycache__/sdist.cpython-38.pyc | Bin 7863 -> 0 bytes .../command/__pycache__/setopt.cpython-38.pyc | Bin 4541 -> 0 bytes .../command/__pycache__/test.cpython-38.pyc | Bin 8489 -> 0 bytes .../command/__pycache__/upload.cpython-38.pyc | Bin 788 -> 0 bytes .../__pycache__/upload_docs.cpython-38.pyc | Bin 6141 -> 0 bytes .../site-packages/setuptools/command/alias.py | 80 - .../setuptools/command/bdist_egg.py | 502 - .../setuptools/command/bdist_rpm.py | 43 - .../setuptools/command/bdist_wininst.py | 21 - .../setuptools/command/build_clib.py | 101 - .../setuptools/command/build_ext.py | 330 - .../setuptools/command/build_py.py | 270 - .../setuptools/command/develop.py | 221 - .../setuptools/command/dist_info.py | 36 - .../setuptools/command/easy_install.py | 2349 ----- .../setuptools/command/egg_info.py | 721 -- .../setuptools/command/install.py | 125 - .../setuptools/command/install_egg_info.py | 62 - .../setuptools/command/install_lib.py | 122 - .../setuptools/command/install_scripts.py | 68 - .../setuptools/command/launcher manifest.xml | 15 - .../setuptools/command/py36compat.py | 136 - .../setuptools/command/register.py | 18 - .../setuptools/command/rotate.py | 66 - .../setuptools/command/saveopts.py | 22 - .../site-packages/setuptools/command/sdist.py | 252 - .../setuptools/command/setopt.py | 149 - .../site-packages/setuptools/command/test.py | 280 - .../setuptools/command/upload.py | 17 - .../setuptools/command/upload_docs.py | 206 - .../site-packages/setuptools/config.py | 659 -- .../site-packages/setuptools/dep_util.py | 25 - .../site-packages/setuptools/depends.py | 176 - .../site-packages/setuptools/dist.py | 1274 --- .../site-packages/setuptools/errors.py | 16 - .../site-packages/setuptools/extension.py | 57 - .../setuptools/extern/__init__.py | 73 - .../__pycache__/__init__.cpython-38.pyc | Bin 2424 -> 0 bytes .../site-packages/setuptools/glob.py | 174 - .../site-packages/setuptools/gui-32.exe | Bin 65536 -> 0 bytes .../site-packages/setuptools/gui-64.exe | Bin 75264 -> 0 bytes .../site-packages/setuptools/gui.exe | Bin 65536 -> 0 bytes .../site-packages/setuptools/installer.py | 150 - .../site-packages/setuptools/launch.py | 35 - .../site-packages/setuptools/lib2to3_ex.py | 62 - .../site-packages/setuptools/monkey.py | 179 - .../site-packages/setuptools/msvc.py | 1682 ---- .../site-packages/setuptools/namespaces.py | 111 - .../site-packages/setuptools/package_index.py | 1138 --- .../site-packages/setuptools/py27compat.py | 60 - .../site-packages/setuptools/py31compat.py | 32 - .../site-packages/setuptools/py33compat.py | 59 - .../site-packages/setuptools/py34compat.py | 13 - .../site-packages/setuptools/sandbox.py | 492 - .../setuptools/script (dev).tmpl | 6 - .../site-packages/setuptools/script.tmpl | 3 - .../site-packages/setuptools/site-patch.py | 76 - .../site-packages/setuptools/ssl_support.py | 265 - .../site-packages/setuptools/unicode_utils.py | 44 - .../site-packages/setuptools/version.py | 6 - .../site-packages/setuptools/wheel.py | 221 - .../setuptools/windows_support.py | 29 - .../six-1.14.0.dist-info/INSTALLER | 1 - .../six-1.14.0.dist-info/LICENSE | 18 - .../six-1.14.0.dist-info/METADATA | 49 - .../site-packages/six-1.14.0.dist-info/RECORD | 8 - .../site-packages/six-1.14.0.dist-info/WHEEL | 6 - .../six-1.14.0.dist-info/top_level.txt | 1 - .../venv/lib/python3.8/site-packages/six.py | 980 -- .../site-packages/unidecode/__init__.py | 103 - .../site-packages/unidecode/__main__.py | 3 - .../__pycache__/__init__.cpython-38.pyc | Bin 2754 -> 0 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 196 -> 0 bytes .../unidecode/__pycache__/util.cpython-38.pyc | Bin 1663 -> 0 bytes .../unidecode/__pycache__/x000.cpython-38.pyc | Bin 1357 -> 0 bytes .../unidecode/__pycache__/x001.cpython-38.pyc | Bin 1299 -> 0 bytes .../unidecode/__pycache__/x002.cpython-38.pyc | Bin 1280 -> 0 bytes .../unidecode/__pycache__/x003.cpython-38.pyc | Bin 1301 -> 0 bytes .../unidecode/__pycache__/x004.cpython-38.pyc | Bin 1281 -> 0 bytes .../unidecode/__pycache__/x005.cpython-38.pyc | Bin 1277 -> 0 bytes .../unidecode/__pycache__/x006.cpython-38.pyc | Bin 1272 -> 0 bytes .../unidecode/__pycache__/x007.cpython-38.pyc | Bin 1314 -> 0 bytes .../unidecode/__pycache__/x009.cpython-38.pyc | Bin 1310 -> 0 bytes .../unidecode/__pycache__/x00a.cpython-38.pyc | Bin 1322 -> 0 bytes .../unidecode/__pycache__/x00b.cpython-38.pyc | Bin 1326 -> 0 bytes .../unidecode/__pycache__/x00c.cpython-38.pyc | Bin 1324 -> 0 bytes .../unidecode/__pycache__/x00d.cpython-38.pyc | Bin 1320 -> 0 bytes .../unidecode/__pycache__/x00e.cpython-38.pyc | Bin 1334 -> 0 bytes .../unidecode/__pycache__/x00f.cpython-38.pyc | Bin 1323 -> 0 bytes .../unidecode/__pycache__/x010.cpython-38.pyc | Bin 1250 -> 0 bytes .../unidecode/__pycache__/x011.cpython-38.pyc | Bin 1332 -> 0 bytes .../unidecode/__pycache__/x012.cpython-38.pyc | Bin 1381 -> 0 bytes .../unidecode/__pycache__/x013.cpython-38.pyc | Bin 1331 -> 0 bytes .../unidecode/__pycache__/x014.cpython-38.pyc | Bin 1377 -> 0 bytes .../unidecode/__pycache__/x015.cpython-38.pyc | Bin 1409 -> 0 bytes .../unidecode/__pycache__/x016.cpython-38.pyc | Bin 1340 -> 0 bytes .../unidecode/__pycache__/x017.cpython-38.pyc | Bin 1318 -> 0 bytes .../unidecode/__pycache__/x018.cpython-38.pyc | Bin 1318 -> 0 bytes .../unidecode/__pycache__/x01d.cpython-38.pyc | Bin 1336 -> 0 bytes .../unidecode/__pycache__/x01e.cpython-38.pyc | Bin 1328 -> 0 bytes .../unidecode/__pycache__/x01f.cpython-38.pyc | Bin 1389 -> 0 bytes .../unidecode/__pycache__/x020.cpython-38.pyc | Bin 1287 -> 0 bytes .../unidecode/__pycache__/x021.cpython-38.pyc | Bin 1382 -> 0 bytes .../unidecode/__pycache__/x022.cpython-38.pyc | Bin 1409 -> 0 bytes .../unidecode/__pycache__/x023.cpython-38.pyc | Bin 1420 -> 0 bytes .../unidecode/__pycache__/x024.cpython-38.pyc | Bin 1297 -> 0 bytes .../unidecode/__pycache__/x025.cpython-38.pyc | Bin 1399 -> 0 bytes .../unidecode/__pycache__/x026.cpython-38.pyc | Bin 1420 -> 0 bytes .../unidecode/__pycache__/x027.cpython-38.pyc | Bin 1411 -> 0 bytes .../unidecode/__pycache__/x028.cpython-38.pyc | Bin 2137 -> 0 bytes .../unidecode/__pycache__/x029.cpython-38.pyc | Bin 1419 -> 0 bytes .../unidecode/__pycache__/x02a.cpython-38.pyc | Bin 1421 -> 0 bytes .../unidecode/__pycache__/x02c.cpython-38.pyc | Bin 1394 -> 0 bytes .../unidecode/__pycache__/x02e.cpython-38.pyc | Bin 1426 -> 0 bytes .../unidecode/__pycache__/x02f.cpython-38.pyc | Bin 1426 -> 0 bytes .../unidecode/__pycache__/x030.cpython-38.pyc | Bin 1295 -> 0 bytes .../unidecode/__pycache__/x031.cpython-38.pyc | Bin 1277 -> 0 bytes .../unidecode/__pycache__/x032.cpython-38.pyc | Bin 1468 -> 0 bytes .../unidecode/__pycache__/x033.cpython-38.pyc | Bin 1582 -> 0 bytes .../unidecode/__pycache__/x04d.cpython-38.pyc | Bin 1426 -> 0 bytes .../unidecode/__pycache__/x04e.cpython-38.pyc | Bin 1602 -> 0 bytes .../unidecode/__pycache__/x04f.cpython-38.pyc | Bin 1603 -> 0 bytes .../unidecode/__pycache__/x050.cpython-38.pyc | Bin 1646 -> 0 bytes .../unidecode/__pycache__/x051.cpython-38.pyc | Bin 1628 -> 0 bytes .../unidecode/__pycache__/x052.cpython-38.pyc | Bin 1580 -> 0 bytes .../unidecode/__pycache__/x053.cpython-38.pyc | Bin 1595 -> 0 bytes .../unidecode/__pycache__/x054.cpython-38.pyc | Bin 1591 -> 0 bytes .../unidecode/__pycache__/x055.cpython-38.pyc | Bin 1589 -> 0 bytes .../unidecode/__pycache__/x056.cpython-38.pyc | Bin 1593 -> 0 bytes .../unidecode/__pycache__/x057.cpython-38.pyc | Bin 1622 -> 0 bytes .../unidecode/__pycache__/x058.cpython-38.pyc | Bin 1625 -> 0 bytes .../unidecode/__pycache__/x059.cpython-38.pyc | Bin 1618 -> 0 bytes .../unidecode/__pycache__/x05a.cpython-38.pyc | Bin 1620 -> 0 bytes .../unidecode/__pycache__/x05b.cpython-38.pyc | Bin 1620 -> 0 bytes .../unidecode/__pycache__/x05c.cpython-38.pyc | Bin 1589 -> 0 bytes .../unidecode/__pycache__/x05d.cpython-38.pyc | Bin 1616 -> 0 bytes .../unidecode/__pycache__/x05e.cpython-38.pyc | Bin 1615 -> 0 bytes .../unidecode/__pycache__/x05f.cpython-38.pyc | Bin 1617 -> 0 bytes .../unidecode/__pycache__/x060.cpython-38.pyc | Bin 1612 -> 0 bytes .../unidecode/__pycache__/x061.cpython-38.pyc | Bin 1607 -> 0 bytes .../unidecode/__pycache__/x062.cpython-38.pyc | Bin 1611 -> 0 bytes .../unidecode/__pycache__/x063.cpython-38.pyc | Bin 1630 -> 0 bytes .../unidecode/__pycache__/x064.cpython-38.pyc | Bin 1631 -> 0 bytes .../unidecode/__pycache__/x065.cpython-38.pyc | Bin 1592 -> 0 bytes .../unidecode/__pycache__/x066.cpython-38.pyc | Bin 1616 -> 0 bytes .../unidecode/__pycache__/x067.cpython-38.pyc | Bin 1628 -> 0 bytes .../unidecode/__pycache__/x068.cpython-38.pyc | Bin 1648 -> 0 bytes .../unidecode/__pycache__/x069.cpython-38.pyc | Bin 1649 -> 0 bytes .../unidecode/__pycache__/x06a.cpython-38.pyc | Bin 1647 -> 0 bytes .../unidecode/__pycache__/x06b.cpython-38.pyc | Bin 1597 -> 0 bytes .../unidecode/__pycache__/x06c.cpython-38.pyc | Bin 1632 -> 0 bytes .../unidecode/__pycache__/x06d.cpython-38.pyc | Bin 1631 -> 0 bytes .../unidecode/__pycache__/x06e.cpython-38.pyc | Bin 1614 -> 0 bytes .../unidecode/__pycache__/x06f.cpython-38.pyc | Bin 1620 -> 0 bytes .../unidecode/__pycache__/x070.cpython-38.pyc | Bin 1626 -> 0 bytes .../unidecode/__pycache__/x071.cpython-38.pyc | Bin 1615 -> 0 bytes .../unidecode/__pycache__/x072.cpython-38.pyc | Bin 1631 -> 0 bytes .../unidecode/__pycache__/x073.cpython-38.pyc | Bin 1633 -> 0 bytes .../unidecode/__pycache__/x074.cpython-38.pyc | Bin 1662 -> 0 bytes .../unidecode/__pycache__/x075.cpython-38.pyc | Bin 1621 -> 0 bytes .../unidecode/__pycache__/x076.cpython-38.pyc | Bin 1604 -> 0 bytes .../unidecode/__pycache__/x077.cpython-38.pyc | Bin 1615 -> 0 bytes .../unidecode/__pycache__/x078.cpython-38.pyc | Bin 1606 -> 0 bytes .../unidecode/__pycache__/x079.cpython-38.pyc | Bin 1591 -> 0 bytes .../unidecode/__pycache__/x07a.cpython-38.pyc | Bin 1616 -> 0 bytes .../unidecode/__pycache__/x07b.cpython-38.pyc | Bin 1628 -> 0 bytes .../unidecode/__pycache__/x07c.cpython-38.pyc | Bin 1620 -> 0 bytes .../unidecode/__pycache__/x07d.cpython-38.pyc | Bin 1635 -> 0 bytes .../unidecode/__pycache__/x07e.cpython-38.pyc | Bin 1635 -> 0 bytes .../unidecode/__pycache__/x07f.cpython-38.pyc | Bin 1608 -> 0 bytes .../unidecode/__pycache__/x080.cpython-38.pyc | Bin 1611 -> 0 bytes .../unidecode/__pycache__/x081.cpython-38.pyc | Bin 1637 -> 0 bytes .../unidecode/__pycache__/x082.cpython-38.pyc | Bin 1633 -> 0 bytes .../unidecode/__pycache__/x083.cpython-38.pyc | Bin 1625 -> 0 bytes .../unidecode/__pycache__/x084.cpython-38.pyc | Bin 1616 -> 0 bytes .../unidecode/__pycache__/x085.cpython-38.pyc | Bin 1606 -> 0 bytes .../unidecode/__pycache__/x086.cpython-38.pyc | Bin 1603 -> 0 bytes .../unidecode/__pycache__/x087.cpython-38.pyc | Bin 1627 -> 0 bytes .../unidecode/__pycache__/x088.cpython-38.pyc | Bin 1617 -> 0 bytes .../unidecode/__pycache__/x089.cpython-38.pyc | Bin 1595 -> 0 bytes .../unidecode/__pycache__/x08a.cpython-38.pyc | Bin 1618 -> 0 bytes .../unidecode/__pycache__/x08b.cpython-38.pyc | Bin 1602 -> 0 bytes .../unidecode/__pycache__/x08c.cpython-38.pyc | Bin 1607 -> 0 bytes .../unidecode/__pycache__/x08d.cpython-38.pyc | Bin 1598 -> 0 bytes .../unidecode/__pycache__/x08e.cpython-38.pyc | Bin 1627 -> 0 bytes .../unidecode/__pycache__/x08f.cpython-38.pyc | Bin 1593 -> 0 bytes .../unidecode/__pycache__/x090.cpython-38.pyc | Bin 1621 -> 0 bytes .../unidecode/__pycache__/x091.cpython-38.pyc | Bin 1626 -> 0 bytes .../unidecode/__pycache__/x092.cpython-38.pyc | Bin 1628 -> 0 bytes .../unidecode/__pycache__/x093.cpython-38.pyc | Bin 1626 -> 0 bytes .../unidecode/__pycache__/x094.cpython-38.pyc | Bin 1625 -> 0 bytes .../unidecode/__pycache__/x095.cpython-38.pyc | Bin 1615 -> 0 bytes .../unidecode/__pycache__/x096.cpython-38.pyc | Bin 1587 -> 0 bytes .../unidecode/__pycache__/x097.cpython-38.pyc | Bin 1591 -> 0 bytes .../unidecode/__pycache__/x098.cpython-38.pyc | Bin 1575 -> 0 bytes .../unidecode/__pycache__/x099.cpython-38.pyc | Bin 1587 -> 0 bytes .../unidecode/__pycache__/x09a.cpython-38.pyc | Bin 1575 -> 0 bytes .../unidecode/__pycache__/x09b.cpython-38.pyc | Bin 1644 -> 0 bytes .../unidecode/__pycache__/x09c.cpython-38.pyc | Bin 1602 -> 0 bytes .../unidecode/__pycache__/x09d.cpython-38.pyc | Bin 1636 -> 0 bytes .../unidecode/__pycache__/x09e.cpython-38.pyc | Bin 1585 -> 0 bytes .../unidecode/__pycache__/x09f.cpython-38.pyc | Bin 1522 -> 0 bytes .../unidecode/__pycache__/x0a0.cpython-38.pyc | Bin 1498 -> 0 bytes .../unidecode/__pycache__/x0a1.cpython-38.pyc | Bin 1539 -> 0 bytes .../unidecode/__pycache__/x0a2.cpython-38.pyc | Bin 1573 -> 0 bytes .../unidecode/__pycache__/x0a3.cpython-38.pyc | Bin 1591 -> 0 bytes .../unidecode/__pycache__/x0a4.cpython-38.pyc | Bin 1516 -> 0 bytes .../unidecode/__pycache__/x0ac.cpython-38.pyc | Bin 1779 -> 0 bytes .../unidecode/__pycache__/x0ad.cpython-38.pyc | Bin 1836 -> 0 bytes .../unidecode/__pycache__/x0ae.cpython-38.pyc | Bin 1945 -> 0 bytes .../unidecode/__pycache__/x0af.cpython-38.pyc | Bin 2082 -> 0 bytes .../unidecode/__pycache__/x0b0.cpython-38.pyc | Bin 1923 -> 0 bytes .../unidecode/__pycache__/x0b1.cpython-38.pyc | Bin 1816 -> 0 bytes .../unidecode/__pycache__/x0b2.cpython-38.pyc | Bin 1750 -> 0 bytes .../unidecode/__pycache__/x0b3.cpython-38.pyc | Bin 1811 -> 0 bytes .../unidecode/__pycache__/x0b4.cpython-38.pyc | Bin 1832 -> 0 bytes .../unidecode/__pycache__/x0b5.cpython-38.pyc | Bin 1989 -> 0 bytes .../unidecode/__pycache__/x0b6.cpython-38.pyc | Bin 2066 -> 0 bytes .../unidecode/__pycache__/x0b7.cpython-38.pyc | Bin 1903 -> 0 bytes .../unidecode/__pycache__/x0b8.cpython-38.pyc | Bin 1784 -> 0 bytes .../unidecode/__pycache__/x0b9.cpython-38.pyc | Bin 1774 -> 0 bytes .../unidecode/__pycache__/x0ba.cpython-38.pyc | Bin 1835 -> 0 bytes .../unidecode/__pycache__/x0bb.cpython-38.pyc | Bin 1800 -> 0 bytes .../unidecode/__pycache__/x0bc.cpython-38.pyc | Bin 1777 -> 0 bytes .../unidecode/__pycache__/x0bd.cpython-38.pyc | Bin 1822 -> 0 bytes .../unidecode/__pycache__/x0be.cpython-38.pyc | Bin 1919 -> 0 bytes .../unidecode/__pycache__/x0bf.cpython-38.pyc | Bin 2080 -> 0 bytes .../unidecode/__pycache__/x0c0.cpython-38.pyc | Bin 1926 -> 0 bytes .../unidecode/__pycache__/x0c1.cpython-38.pyc | Bin 1835 -> 0 bytes .../unidecode/__pycache__/x0c2.cpython-38.pyc | Bin 1780 -> 0 bytes .../unidecode/__pycache__/x0c3.cpython-38.pyc | Bin 2045 -> 0 bytes .../unidecode/__pycache__/x0c4.cpython-38.pyc | Bin 2094 -> 0 bytes .../unidecode/__pycache__/x0c5.cpython-38.pyc | Bin 1651 -> 0 bytes .../unidecode/__pycache__/x0c6.cpython-38.pyc | Bin 1560 -> 0 bytes .../unidecode/__pycache__/x0c7.cpython-38.pyc | Bin 1634 -> 0 bytes .../unidecode/__pycache__/x0c8.cpython-38.pyc | Bin 1803 -> 0 bytes .../unidecode/__pycache__/x0c9.cpython-38.pyc | Bin 1792 -> 0 bytes .../unidecode/__pycache__/x0ca.cpython-38.pyc | Bin 2077 -> 0 bytes .../unidecode/__pycache__/x0cb.cpython-38.pyc | Bin 2082 -> 0 bytes .../unidecode/__pycache__/x0cc.cpython-38.pyc | Bin 1819 -> 0 bytes .../unidecode/__pycache__/x0cd.cpython-38.pyc | Bin 1808 -> 0 bytes .../unidecode/__pycache__/x0ce.cpython-38.pyc | Bin 1778 -> 0 bytes .../unidecode/__pycache__/x0cf.cpython-38.pyc | Bin 1783 -> 0 bytes .../unidecode/__pycache__/x0d0.cpython-38.pyc | Bin 1776 -> 0 bytes .../unidecode/__pycache__/x0d1.cpython-38.pyc | Bin 1837 -> 0 bytes .../unidecode/__pycache__/x0d2.cpython-38.pyc | Bin 1794 -> 0 bytes .../unidecode/__pycache__/x0d3.cpython-38.pyc | Bin 1775 -> 0 bytes .../unidecode/__pycache__/x0d4.cpython-38.pyc | Bin 1828 -> 0 bytes .../unidecode/__pycache__/x0d5.cpython-38.pyc | Bin 1750 -> 0 bytes .../unidecode/__pycache__/x0d6.cpython-38.pyc | Bin 1835 -> 0 bytes .../unidecode/__pycache__/x0d7.cpython-38.pyc | Bin 1638 -> 0 bytes .../unidecode/__pycache__/x0f9.cpython-38.pyc | Bin 1518 -> 0 bytes .../unidecode/__pycache__/x0fa.cpython-38.pyc | Bin 1467 -> 0 bytes .../unidecode/__pycache__/x0fb.cpython-38.pyc | Bin 1381 -> 0 bytes .../unidecode/__pycache__/x0fc.cpython-38.pyc | Bin 1430 -> 0 bytes .../unidecode/__pycache__/x0fd.cpython-38.pyc | Bin 1422 -> 0 bytes .../unidecode/__pycache__/x0fe.cpython-38.pyc | Bin 1372 -> 0 bytes .../unidecode/__pycache__/x0ff.cpython-38.pyc | Bin 1174 -> 0 bytes .../unidecode/__pycache__/x1d4.cpython-38.pyc | Bin 1326 -> 0 bytes .../unidecode/__pycache__/x1d5.cpython-38.pyc | Bin 1326 -> 0 bytes .../unidecode/__pycache__/x1d6.cpython-38.pyc | Bin 1382 -> 0 bytes .../unidecode/__pycache__/x1d7.cpython-38.pyc | Bin 1410 -> 0 bytes .../unidecode/__pycache__/x1f1.cpython-38.pyc | Bin 1419 -> 0 bytes .../python3.8/site-packages/unidecode/util.py | 58 - .../python3.8/site-packages/unidecode/x000.py | 165 - .../python3.8/site-packages/unidecode/x001.py | 258 - .../python3.8/site-packages/unidecode/x002.py | 257 - .../python3.8/site-packages/unidecode/x003.py | 257 - .../python3.8/site-packages/unidecode/x004.py | 257 - .../python3.8/site-packages/unidecode/x005.py | 257 - .../python3.8/site-packages/unidecode/x006.py | 257 - .../python3.8/site-packages/unidecode/x007.py | 257 - .../python3.8/site-packages/unidecode/x009.py | 257 - .../python3.8/site-packages/unidecode/x00a.py | 257 - .../python3.8/site-packages/unidecode/x00b.py | 257 - .../python3.8/site-packages/unidecode/x00c.py | 257 - .../python3.8/site-packages/unidecode/x00d.py | 257 - .../python3.8/site-packages/unidecode/x00e.py | 257 - .../python3.8/site-packages/unidecode/x00f.py | 257 - .../python3.8/site-packages/unidecode/x010.py | 257 - .../python3.8/site-packages/unidecode/x011.py | 257 - .../python3.8/site-packages/unidecode/x012.py | 258 - .../python3.8/site-packages/unidecode/x013.py | 257 - .../python3.8/site-packages/unidecode/x014.py | 258 - .../python3.8/site-packages/unidecode/x015.py | 258 - .../python3.8/site-packages/unidecode/x016.py | 257 - .../python3.8/site-packages/unidecode/x017.py | 257 - .../python3.8/site-packages/unidecode/x018.py | 257 - .../python3.8/site-packages/unidecode/x01d.py | 257 - .../python3.8/site-packages/unidecode/x01e.py | 257 - .../python3.8/site-packages/unidecode/x01f.py | 257 - .../python3.8/site-packages/unidecode/x020.py | 257 - .../python3.8/site-packages/unidecode/x021.py | 257 - .../python3.8/site-packages/unidecode/x022.py | 257 - .../python3.8/site-packages/unidecode/x023.py | 257 - .../python3.8/site-packages/unidecode/x024.py | 258 - .../python3.8/site-packages/unidecode/x025.py | 257 - .../python3.8/site-packages/unidecode/x026.py | 257 - .../python3.8/site-packages/unidecode/x027.py | 257 - .../python3.8/site-packages/unidecode/x028.py | 258 - .../python3.8/site-packages/unidecode/x029.py | 257 - .../python3.8/site-packages/unidecode/x02a.py | 257 - .../python3.8/site-packages/unidecode/x02c.py | 257 - .../python3.8/site-packages/unidecode/x02e.py | 257 - .../python3.8/site-packages/unidecode/x02f.py | 257 - .../python3.8/site-packages/unidecode/x030.py | 257 - .../python3.8/site-packages/unidecode/x031.py | 257 - .../python3.8/site-packages/unidecode/x032.py | 257 - .../python3.8/site-packages/unidecode/x033.py | 258 - .../python3.8/site-packages/unidecode/x04d.py | 257 - .../python3.8/site-packages/unidecode/x04e.py | 258 - .../python3.8/site-packages/unidecode/x04f.py | 258 - .../python3.8/site-packages/unidecode/x050.py | 258 - .../python3.8/site-packages/unidecode/x051.py | 258 - .../python3.8/site-packages/unidecode/x052.py | 258 - .../python3.8/site-packages/unidecode/x053.py | 258 - .../python3.8/site-packages/unidecode/x054.py | 258 - .../python3.8/site-packages/unidecode/x055.py | 258 - .../python3.8/site-packages/unidecode/x056.py | 258 - .../python3.8/site-packages/unidecode/x057.py | 258 - .../python3.8/site-packages/unidecode/x058.py | 258 - .../python3.8/site-packages/unidecode/x059.py | 258 - .../python3.8/site-packages/unidecode/x05a.py | 258 - .../python3.8/site-packages/unidecode/x05b.py | 258 - .../python3.8/site-packages/unidecode/x05c.py | 258 - .../python3.8/site-packages/unidecode/x05d.py | 258 - .../python3.8/site-packages/unidecode/x05e.py | 258 - .../python3.8/site-packages/unidecode/x05f.py | 258 - .../python3.8/site-packages/unidecode/x060.py | 258 - .../python3.8/site-packages/unidecode/x061.py | 258 - .../python3.8/site-packages/unidecode/x062.py | 258 - .../python3.8/site-packages/unidecode/x063.py | 258 - .../python3.8/site-packages/unidecode/x064.py | 258 - .../python3.8/site-packages/unidecode/x065.py | 258 - .../python3.8/site-packages/unidecode/x066.py | 258 - .../python3.8/site-packages/unidecode/x067.py | 258 - .../python3.8/site-packages/unidecode/x068.py | 258 - .../python3.8/site-packages/unidecode/x069.py | 258 - .../python3.8/site-packages/unidecode/x06a.py | 258 - .../python3.8/site-packages/unidecode/x06b.py | 258 - .../python3.8/site-packages/unidecode/x06c.py | 258 - .../python3.8/site-packages/unidecode/x06d.py | 258 - .../python3.8/site-packages/unidecode/x06e.py | 258 - .../python3.8/site-packages/unidecode/x06f.py | 258 - .../python3.8/site-packages/unidecode/x070.py | 258 - .../python3.8/site-packages/unidecode/x071.py | 258 - .../python3.8/site-packages/unidecode/x072.py | 258 - .../python3.8/site-packages/unidecode/x073.py | 258 - .../python3.8/site-packages/unidecode/x074.py | 258 - .../python3.8/site-packages/unidecode/x075.py | 258 - .../python3.8/site-packages/unidecode/x076.py | 258 - .../python3.8/site-packages/unidecode/x077.py | 258 - .../python3.8/site-packages/unidecode/x078.py | 258 - .../python3.8/site-packages/unidecode/x079.py | 258 - .../python3.8/site-packages/unidecode/x07a.py | 258 - .../python3.8/site-packages/unidecode/x07b.py | 258 - .../python3.8/site-packages/unidecode/x07c.py | 258 - .../python3.8/site-packages/unidecode/x07d.py | 258 - .../python3.8/site-packages/unidecode/x07e.py | 258 - .../python3.8/site-packages/unidecode/x07f.py | 258 - .../python3.8/site-packages/unidecode/x080.py | 258 - .../python3.8/site-packages/unidecode/x081.py | 258 - .../python3.8/site-packages/unidecode/x082.py | 258 - .../python3.8/site-packages/unidecode/x083.py | 258 - .../python3.8/site-packages/unidecode/x084.py | 258 - .../python3.8/site-packages/unidecode/x085.py | 258 - .../python3.8/site-packages/unidecode/x086.py | 258 - .../python3.8/site-packages/unidecode/x087.py | 258 - .../python3.8/site-packages/unidecode/x088.py | 258 - .../python3.8/site-packages/unidecode/x089.py | 258 - .../python3.8/site-packages/unidecode/x08a.py | 258 - .../python3.8/site-packages/unidecode/x08b.py | 258 - .../python3.8/site-packages/unidecode/x08c.py | 258 - .../python3.8/site-packages/unidecode/x08d.py | 258 - .../python3.8/site-packages/unidecode/x08e.py | 258 - .../python3.8/site-packages/unidecode/x08f.py | 258 - .../python3.8/site-packages/unidecode/x090.py | 258 - .../python3.8/site-packages/unidecode/x091.py | 258 - .../python3.8/site-packages/unidecode/x092.py | 258 - .../python3.8/site-packages/unidecode/x093.py | 258 - .../python3.8/site-packages/unidecode/x094.py | 258 - .../python3.8/site-packages/unidecode/x095.py | 258 - .../python3.8/site-packages/unidecode/x096.py | 258 - .../python3.8/site-packages/unidecode/x097.py | 258 - .../python3.8/site-packages/unidecode/x098.py | 258 - .../python3.8/site-packages/unidecode/x099.py | 258 - .../python3.8/site-packages/unidecode/x09a.py | 258 - .../python3.8/site-packages/unidecode/x09b.py | 258 - .../python3.8/site-packages/unidecode/x09c.py | 258 - .../python3.8/site-packages/unidecode/x09d.py | 258 - .../python3.8/site-packages/unidecode/x09e.py | 258 - .../python3.8/site-packages/unidecode/x09f.py | 257 - .../python3.8/site-packages/unidecode/x0a0.py | 258 - .../python3.8/site-packages/unidecode/x0a1.py | 258 - .../python3.8/site-packages/unidecode/x0a2.py | 258 - .../python3.8/site-packages/unidecode/x0a3.py | 258 - .../python3.8/site-packages/unidecode/x0a4.py | 257 - .../python3.8/site-packages/unidecode/x0ac.py | 258 - .../python3.8/site-packages/unidecode/x0ad.py | 258 - .../python3.8/site-packages/unidecode/x0ae.py | 258 - .../python3.8/site-packages/unidecode/x0af.py | 258 - .../python3.8/site-packages/unidecode/x0b0.py | 258 - .../python3.8/site-packages/unidecode/x0b1.py | 258 - .../python3.8/site-packages/unidecode/x0b2.py | 258 - .../python3.8/site-packages/unidecode/x0b3.py | 258 - .../python3.8/site-packages/unidecode/x0b4.py | 258 - .../python3.8/site-packages/unidecode/x0b5.py | 258 - .../python3.8/site-packages/unidecode/x0b6.py | 258 - .../python3.8/site-packages/unidecode/x0b7.py | 258 - .../python3.8/site-packages/unidecode/x0b8.py | 258 - .../python3.8/site-packages/unidecode/x0b9.py | 258 - .../python3.8/site-packages/unidecode/x0ba.py | 258 - .../python3.8/site-packages/unidecode/x0bb.py | 258 - .../python3.8/site-packages/unidecode/x0bc.py | 258 - .../python3.8/site-packages/unidecode/x0bd.py | 258 - .../python3.8/site-packages/unidecode/x0be.py | 258 - .../python3.8/site-packages/unidecode/x0bf.py | 258 - .../python3.8/site-packages/unidecode/x0c0.py | 258 - .../python3.8/site-packages/unidecode/x0c1.py | 258 - .../python3.8/site-packages/unidecode/x0c2.py | 258 - .../python3.8/site-packages/unidecode/x0c3.py | 258 - .../python3.8/site-packages/unidecode/x0c4.py | 258 - .../python3.8/site-packages/unidecode/x0c5.py | 258 - .../python3.8/site-packages/unidecode/x0c6.py | 258 - .../python3.8/site-packages/unidecode/x0c7.py | 258 - .../python3.8/site-packages/unidecode/x0c8.py | 258 - .../python3.8/site-packages/unidecode/x0c9.py | 258 - .../python3.8/site-packages/unidecode/x0ca.py | 258 - .../python3.8/site-packages/unidecode/x0cb.py | 258 - .../python3.8/site-packages/unidecode/x0cc.py | 258 - .../python3.8/site-packages/unidecode/x0cd.py | 258 - .../python3.8/site-packages/unidecode/x0ce.py | 258 - .../python3.8/site-packages/unidecode/x0cf.py | 258 - .../python3.8/site-packages/unidecode/x0d0.py | 258 - .../python3.8/site-packages/unidecode/x0d1.py | 258 - .../python3.8/site-packages/unidecode/x0d2.py | 258 - .../python3.8/site-packages/unidecode/x0d3.py | 258 - .../python3.8/site-packages/unidecode/x0d4.py | 258 - .../python3.8/site-packages/unidecode/x0d5.py | 258 - .../python3.8/site-packages/unidecode/x0d6.py | 258 - .../python3.8/site-packages/unidecode/x0d7.py | 257 - .../python3.8/site-packages/unidecode/x0f9.py | 258 - .../python3.8/site-packages/unidecode/x0fa.py | 257 - .../python3.8/site-packages/unidecode/x0fb.py | 258 - .../python3.8/site-packages/unidecode/x0fc.py | 258 - .../python3.8/site-packages/unidecode/x0fd.py | 257 - .../python3.8/site-packages/unidecode/x0fe.py | 258 - .../python3.8/site-packages/unidecode/x0ff.py | 258 - .../python3.8/site-packages/unidecode/x1d4.py | 258 - .../python3.8/site-packages/unidecode/x1d5.py | 258 - .../python3.8/site-packages/unidecode/x1d6.py | 258 - .../python3.8/site-packages/unidecode/x1d7.py | 258 - .../python3.8/site-packages/unidecode/x1f1.py | 258 - .../wheel-0.34.2.dist-info/INSTALLER | 1 - .../wheel-0.34.2.dist-info/LICENSE.txt | 22 - .../wheel-0.34.2.dist-info/METADATA | 66 - .../wheel-0.34.2.dist-info/RECORD | 38 - .../wheel-0.34.2.dist-info/WHEEL | 6 - .../wheel-0.34.2.dist-info/entry_points.txt | 6 - .../wheel-0.34.2.dist-info/top_level.txt | 1 - .../python3.8/site-packages/wheel/__init__.py | 1 - .../python3.8/site-packages/wheel/__main__.py | 19 - .../wheel/__pycache__/__init__.cpython-38.pyc | Bin 162 -> 0 bytes .../wheel/__pycache__/__main__.cpython-38.pyc | Bin 559 -> 0 bytes .../wheel/__pycache__/_version.cpython-38.pyc | Bin 174 -> 0 bytes .../__pycache__/bdist_wheel.cpython-38.pyc | Bin 10868 -> 0 bytes .../__pycache__/macosx_libfile.cpython-38.pyc | Bin 7089 -> 0 bytes .../wheel/__pycache__/metadata.cpython-38.pyc | Bin 3698 -> 0 bytes .../__pycache__/pep425tags.cpython-38.pyc | Bin 7586 -> 0 bytes .../wheel/__pycache__/pkginfo.cpython-38.pyc | Bin 1523 -> 0 bytes .../wheel/__pycache__/util.cpython-38.pyc | Bin 1276 -> 0 bytes .../__pycache__/wheelfile.cpython-38.pyc | Bin 5494 -> 0 bytes .../python3.8/site-packages/wheel/_version.py | 4 - .../site-packages/wheel/bdist_wheel.py | 403 - .../site-packages/wheel/cli/__init__.py | 88 - .../cli/__pycache__/__init__.cpython-38.pyc | Bin 3046 -> 0 bytes .../cli/__pycache__/convert.cpython-38.pyc | Bin 6176 -> 0 bytes .../cli/__pycache__/install.cpython-38.pyc | Bin 143 -> 0 bytes .../wheel/cli/__pycache__/pack.cpython-38.pyc | Bin 2811 -> 0 bytes .../cli/__pycache__/unpack.cpython-38.pyc | Bin 911 -> 0 bytes .../site-packages/wheel/cli/convert.py | 269 - .../site-packages/wheel/cli/install.py | 0 .../python3.8/site-packages/wheel/cli/pack.py | 79 - .../site-packages/wheel/cli/unpack.py | 25 - .../site-packages/wheel/macosx_libfile.py | 341 - .../python3.8/site-packages/wheel/metadata.py | 138 - .../site-packages/wheel/pep425tags.py | 261 - .../python3.8/site-packages/wheel/pkginfo.py | 43 - .../lib/python3.8/site-packages/wheel/util.py | 46 - .../site-packages/wheel/wheelfile.py | 169 - blog-generator/venv/lib/python3.8/site.py | 833 -- .../venv/lib/python3.8/sre_compile.py | 1 - .../venv/lib/python3.8/sre_constants.py | 1 - .../venv/lib/python3.8/sre_parse.py | 1 - blog-generator/venv/lib/python3.8/stat.py | 1 - blog-generator/venv/lib/python3.8/struct.py | 1 - blog-generator/venv/lib/python3.8/tarfile.py | 1 - blog-generator/venv/lib/python3.8/tempfile.py | 1 - blog-generator/venv/lib/python3.8/token.py | 1 - blog-generator/venv/lib/python3.8/tokenize.py | 1 - blog-generator/venv/lib/python3.8/types.py | 1 - blog-generator/venv/lib/python3.8/warnings.py | 1 - blog-generator/venv/lib/python3.8/weakref.py | 1 - content/cgu.md | 136 + public/index.html => content/pages/home.html | 86 +- {public => content/static}/img/cloud.svg | 0 {public => content/static}/img/docker.svg | 0 {public => content/static}/img/git.svg | 0 {public => content/static}/img/github.svg | 0 {public => content/static}/img/latex.svg | 0 {public => content/static}/img/video.svg | 0 {blog-generator/content => content}/test.md | 0 .../pelicanconf.py => pelicanconf.py | 13 +- public/blog/.auto-generated-dir | 0 public/cgu.html | 87 - public/tutos/get_url_dav_nc_contacts.png | Bin 18463 -> 0 bytes .../publishconf.py => publishconf.py | 0 blog-generator/tasks.py => tasks.py | 0 .../static}/css/SourceSansPro-SemiBold | Bin .../static}/css/font-sourcesanspro.css | 0 .../static}/css/fontawesome-all.min.css | 0 .../jean-cloud/static}/css/helios.css | 0 .../jean-cloud/static}/css/main.css | 13 +- .../jean-cloud/static}/css/solid-state.css | 0 .../static}/fonts/SourceSansPro-Italic.ttf | Bin .../static}/fonts/SourceSansPro-Light.ttf | Bin .../fonts/SourceSansPro-LightItalic.ttf | Bin .../static}/fonts/SourceSansPro-Regular.ttf | Bin .../jean-cloud}/templates/archives.html | 0 .../jean-cloud}/templates/article.html | 0 .../jean-cloud/templates/articles.html | 8 +- .../jean-cloud}/templates/author.html | 0 .../jean-cloud}/templates/authors.html | 0 themes/jean-cloud/templates/base.html | 69 + .../jean-cloud/templates/base.html.bak | 0 .../jean-cloud}/templates/categories.html | 0 .../jean-cloud}/templates/category.html | 2 +- .../jean-cloud}/templates/gosquared.html | 0 themes/jean-cloud/templates/header.html | 11 + themes/jean-cloud/templates/index.html | 20 + .../jean-cloud}/templates/page.html | 2 + .../jean-cloud}/templates/pagination.html | 0 .../templates/period_archives.html | 0 .../jean-cloud}/templates/tag.html | 0 .../jean-cloud}/templates/tags.html | 0 .../jean-cloud}/templates/translations.html | 0 todo.txt | 3 + 3238 files changed, 284 insertions(+), 398006 deletions(-) rename public/503.html => 503.html (100%) rename blog-generator/Makefile => Makefile (98%) delete mode 100644 blog-generator/venv/bin/__pycache__/rst2html.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2html4.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2html5.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2latex.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2man.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2odt.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2odt_prepstyles.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2pseudoxml.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2s5.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2xetex.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rst2xml.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/__pycache__/rstpep2html.cpython-38.pyc delete mode 100644 blog-generator/venv/bin/activate delete mode 100644 blog-generator/venv/bin/activate.csh delete mode 100644 blog-generator/venv/bin/activate.fish delete mode 100644 blog-generator/venv/bin/activate.ps1 delete mode 100644 blog-generator/venv/bin/activate_this.py delete mode 100755 blog-generator/venv/bin/easy_install delete mode 100755 blog-generator/venv/bin/easy_install-3.8 delete mode 100755 blog-generator/venv/bin/markdown_py delete mode 100755 blog-generator/venv/bin/pelican delete mode 100755 blog-generator/venv/bin/pelican-import delete mode 100755 blog-generator/venv/bin/pelican-quickstart delete mode 100755 blog-generator/venv/bin/pelican-themes delete mode 100755 blog-generator/venv/bin/pip delete mode 100755 blog-generator/venv/bin/pip3 delete mode 100755 blog-generator/venv/bin/pip3.8 delete mode 100755 blog-generator/venv/bin/pygmentize delete mode 100755 blog-generator/venv/bin/python delete mode 100755 blog-generator/venv/bin/python-config delete mode 120000 blog-generator/venv/bin/python3 delete mode 120000 blog-generator/venv/bin/python3.8 delete mode 100755 blog-generator/venv/bin/rst2html.py delete mode 100755 blog-generator/venv/bin/rst2html4.py delete mode 100755 blog-generator/venv/bin/rst2html5.py delete mode 100755 blog-generator/venv/bin/rst2latex.py delete mode 100755 blog-generator/venv/bin/rst2man.py delete mode 100755 blog-generator/venv/bin/rst2odt.py delete mode 100755 blog-generator/venv/bin/rst2odt_prepstyles.py delete mode 100755 blog-generator/venv/bin/rst2pseudoxml.py delete mode 100755 blog-generator/venv/bin/rst2s5.py delete mode 100755 blog-generator/venv/bin/rst2xetex.py delete mode 100755 blog-generator/venv/bin/rst2xml.py delete mode 100755 blog-generator/venv/bin/rstpep2html.py delete mode 100755 blog-generator/venv/bin/unidecode delete mode 100755 blog-generator/venv/bin/wheel delete mode 120000 blog-generator/venv/include/python3.8 delete mode 120000 blog-generator/venv/lib/python3.8/__future__.py delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/__future__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/_bootlocale.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/_collections_abc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/_weakrefset.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/abc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/base64.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/bisect.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/codecs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/copy.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/copyreg.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/enum.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/fnmatch.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/functools.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/genericpath.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/hashlib.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/heapq.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/hmac.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/imp.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/io.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/keyword.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/linecache.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/locale.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/ntpath.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/operator.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/os.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/posixpath.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/random.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/re.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/reprlib.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/shutil.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/site.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/sre_compile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/sre_constants.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/sre_parse.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/stat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/struct.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/tarfile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/tempfile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/token.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/tokenize.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/types.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/warnings.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/__pycache__/weakref.cpython-38.pyc delete mode 120000 blog-generator/venv/lib/python3.8/_bootlocale.py delete mode 120000 blog-generator/venv/lib/python3.8/_collections_abc.py delete mode 120000 blog-generator/venv/lib/python3.8/_dummy_thread.py delete mode 120000 blog-generator/venv/lib/python3.8/_weakrefset.py delete mode 120000 blog-generator/venv/lib/python3.8/abc.py delete mode 120000 blog-generator/venv/lib/python3.8/base64.py delete mode 120000 blog-generator/venv/lib/python3.8/bisect.py delete mode 120000 blog-generator/venv/lib/python3.8/codecs.py delete mode 120000 blog-generator/venv/lib/python3.8/collections delete mode 120000 blog-generator/venv/lib/python3.8/config-3.8-x86_64-linux-gnu delete mode 120000 blog-generator/venv/lib/python3.8/copy.py delete mode 120000 blog-generator/venv/lib/python3.8/copyreg.py delete mode 100644 blog-generator/venv/lib/python3.8/distutils/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/distutils/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/distutils/distutils.cfg delete mode 120000 blog-generator/venv/lib/python3.8/encodings delete mode 120000 blog-generator/venv/lib/python3.8/enum.py delete mode 120000 blog-generator/venv/lib/python3.8/fnmatch.py delete mode 120000 blog-generator/venv/lib/python3.8/functools.py delete mode 120000 blog-generator/venv/lib/python3.8/genericpath.py delete mode 120000 blog-generator/venv/lib/python3.8/hashlib.py delete mode 120000 blog-generator/venv/lib/python3.8/heapq.py delete mode 120000 blog-generator/venv/lib/python3.8/hmac.py delete mode 120000 blog-generator/venv/lib/python3.8/imp.py delete mode 120000 blog-generator/venv/lib/python3.8/importlib delete mode 120000 blog-generator/venv/lib/python3.8/io.py delete mode 120000 blog-generator/venv/lib/python3.8/keyword.py delete mode 120000 blog-generator/venv/lib/python3.8/lib-dynload delete mode 120000 blog-generator/venv/lib/python3.8/linecache.py delete mode 120000 blog-generator/venv/lib/python3.8/locale.py delete mode 100644 blog-generator/venv/lib/python3.8/no-global-site-packages.txt delete mode 120000 blog-generator/venv/lib/python3.8/ntpath.py delete mode 120000 blog-generator/venv/lib/python3.8/operator.py delete mode 100644 blog-generator/venv/lib/python3.8/orig-prefix.txt delete mode 120000 blog-generator/venv/lib/python3.8/os.py delete mode 120000 blog-generator/venv/lib/python3.8/posixpath.py delete mode 120000 blog-generator/venv/lib/python3.8/random.py delete mode 120000 blog-generator/venv/lib/python3.8/re.py delete mode 120000 blog-generator/venv/lib/python3.8/reprlib.py delete mode 120000 blog-generator/venv/lib/python3.8/rlcompleter.py delete mode 120000 blog-generator/venv/lib/python3.8/shutil.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/LICENSE.rst delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/entry_points.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/LICENSE.md delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/entry_points.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/AUTHORS delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/LICENSE delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/entry_points.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/DESCRIPTION.rst delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/LICENSE.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/entry_points.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/metadata.json delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/__pycache__/easy_install.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/__pycache__/six.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/AUTHORS delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/LICENSE delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker/__pycache__/_saferef.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker/__pycache__/_utilities.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker/__pycache__/base.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker/_saferef.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker/_utilities.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/blinker/base.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/_common.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/_version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/easter.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/relativedelta.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/rrule.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/tzwin.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/_common.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/_version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/easter.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/_parser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/isoparser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/_parser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/isoparser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/relativedelta.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/rrule.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/_common.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/_factories.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/tz.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/win.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/_common.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/_factories.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/tz.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/win.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/tzwin.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/__pycache__/rebuild.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/rebuild.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/COPYING.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/core.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/examples.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/frontend.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/io.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/nodes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/statemachine.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/core.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/examples.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/frontend.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/io.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/af.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/ca.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/cs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/da.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/de.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/en.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/eo.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/es.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/fa.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/fi.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/fr.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/gl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/he.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/it.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/ja.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/ko.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/lt.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/lv.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/nl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/pl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/pt_br.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/ru.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/sk.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/sv.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/zh_cn.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/__pycache__/zh_tw.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/af.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/ca.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/cs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/da.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/de.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/en.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/eo.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/es.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/fa.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/fi.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/fr.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/gl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/he.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/it.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/ja.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/ko.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/lt.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/lv.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/nl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/pl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/pt_br.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/ru.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/sk.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/sv.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/zh_cn.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/languages/zh_tw.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/nodes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/__pycache__/null.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/null.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/__pycache__/roles.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/__pycache__/states.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/__pycache__/tableparser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/admonitions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/body.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/html.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/images.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/misc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/parts.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/references.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/__pycache__/tables.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/admonitions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/body.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/html.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/images.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/misc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/parts.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/references.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/tables.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/README.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isoamsa.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isoamsb.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isoamsc.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isoamsn.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isoamso.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isoamsr.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isobox.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isocyr1.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isocyr2.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isodia.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isogrk1.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isogrk2.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isogrk3.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isogrk4-wide.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isogrk4.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isolat1.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isolat2.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isomfrk-wide.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isomfrk.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isomopf-wide.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isomopf.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isomscr-wide.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isomscr.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isonum.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isopub.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/isotech.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/mmlalias.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/mmlextra-wide.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/mmlextra.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/s5defs.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/xhtml1-lat1.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/xhtml1-special.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/include/xhtml1-symbol.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/af.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/ca.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/cs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/da.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/de.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/en.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/eo.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/es.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/fa.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/fi.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/fr.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/gl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/he.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/it.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/ja.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/ko.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/lt.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/lv.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/nl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/pl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/pt_br.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/ru.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/sk.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/sv.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/zh_cn.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/__pycache__/zh_tw.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/af.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/ca.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/cs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/da.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/de.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/en.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/eo.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/es.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/fa.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/fi.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/fr.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/gl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/he.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/it.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/ja.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/ko.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/lt.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/lv.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/nl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/pl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/pt_br.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/ru.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/sk.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/sv.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/zh_cn.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/languages/zh_tw.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/roles.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/states.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/parsers/rst/tableparser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/readers/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/readers/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/readers/__pycache__/doctree.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/readers/__pycache__/pep.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/readers/__pycache__/standalone.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/readers/doctree.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/readers/pep.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/readers/standalone.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/statemachine.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/components.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/frontmatter.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/misc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/parts.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/peps.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/references.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/universal.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/writer_aux.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/components.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/frontmatter.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/misc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/parts.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/peps.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/references.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/universal.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/writer_aux.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/code_analyzer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/error_reporting.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/punctuation_chars.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/roman.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/smartquotes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/urischemes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/code_analyzer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/error_reporting.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/latex2mathml.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/math2html.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/tex2mathml_extern.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/tex2unichar.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/unichar2tex.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/latex2mathml.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/math2html.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/tex2mathml_extern.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/tex2unichar.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/unichar2tex.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/punctuation_chars.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/roman.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/smartquotes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/utils/urischemes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/_html_base.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/docutils_xml.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/manpage.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/null.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/pseudoxml.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/_html_base.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/docutils_xml.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html4css1/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html4css1/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html4css1/html4css1.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html4css1/template.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html5_polyglot/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html5_polyglot/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html5_polyglot/math.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html5_polyglot/minimal.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html5_polyglot/plain.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/html5_polyglot/template.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/latex2e/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/latex2e/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/latex2e/default.tex delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/latex2e/titlepage.tex delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/latex2e/xelatex.tex delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/manpage.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/null.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/odf_odt/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/odf_odt/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/odf_odt/__pycache__/pygmentsformatter.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/odf_odt/pygmentsformatter.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/odf_odt/styles.odt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/pep_html/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/pep_html/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/pep_html/pep.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/pep_html/template.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/pseudoxml.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/README.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/big-black/__base__ delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/big-black/framing.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/big-black/pretty.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/big-white/framing.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/big-white/pretty.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/blank.gif delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/framing.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/iepngfix.htc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/opera.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/outline.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/pretty.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/print.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/s5-core.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/slides.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/default/slides.js delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/medium-black/__base__ delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/medium-black/pretty.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/medium-white/framing.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/medium-white/pretty.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/small-black/__base__ delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/small-black/pretty.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/small-white/framing.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/s5_html/themes/small-white/pretty.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/xetex/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/docutils/writers/xetex/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/easy_install.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator-1.9.1.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator-1.9.1.dist-info/LICENSE delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator-1.9.1.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator-1.9.1.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator-1.9.1.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator-1.9.1.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__pycache__/datetime_safe.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__pycache__/encoding.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__pycache__/feedgenerator.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__pycache__/functional.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__pycache__/six.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__pycache__/timezone.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/__pycache__/xmlutils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/datetime_safe.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/encoding.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/feedgenerator.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/functional.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/six.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/timezone.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/feedgenerator/django/utils/xmlutils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/_compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/_identifier.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/asyncfilters.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/asyncsupport.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/bccache.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/compiler.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/constants.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/debug.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/defaults.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/environment.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/exceptions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/ext.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/filters.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/idtracking.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/lexer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/loaders.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/meta.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/nativetypes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/nodes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/optimizer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/parser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/runtime.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/sandbox.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/tests.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/__pycache__/visitor.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/_compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/_identifier.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/asyncfilters.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/asyncsupport.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/bccache.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/compiler.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/constants.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/debug.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/defaults.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/environment.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/exceptions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/ext.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/filters.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/idtracking.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/lexer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/loaders.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/meta.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/nativetypes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/nodes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/optimizer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/parser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/runtime.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/sandbox.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/tests.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/jinja2/visitor.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__main__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__meta__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/__main__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/__meta__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/blockparser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/blockprocessors.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/core.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/inlinepatterns.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/pep562.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/postprocessors.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/preprocessors.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/serializers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/test_tools.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/treeprocessors.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/__pycache__/util.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/blockparser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/blockprocessors.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/core.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/abbr.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/admonition.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/attr_list.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/codehilite.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/def_list.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/extra.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/fenced_code.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/footnotes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/legacy_attrs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/legacy_em.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/md_in_html.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/meta.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/nl2br.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/sane_lists.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/smarty.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/tables.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/toc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/__pycache__/wikilinks.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/abbr.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/admonition.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/attr_list.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/codehilite.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/def_list.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/extra.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/fenced_code.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/footnotes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/legacy_attrs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/legacy_em.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/md_in_html.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/meta.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/nl2br.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/sane_lists.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/smarty.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/tables.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/toc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/extensions/wikilinks.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/inlinepatterns.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/pep562.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/postprocessors.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/preprocessors.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/serializers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/test_tools.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/treeprocessors.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markdown/util.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/__pycache__/_compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/__pycache__/_constants.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/__pycache__/_native.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/_compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/_constants.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/_native.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/markupsafe/_speedups.c delete mode 100755 blog-generator/venv/lib/python3.8/site-packages/markupsafe/_speedups.cpython-38-x86_64-linux-gnu.so delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican-4.2.0.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican-4.2.0.dist-info/LICENSE delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican-4.2.0.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican-4.2.0.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican-4.2.0.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican-4.2.0.dist-info/entry_points.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican-4.2.0.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__main__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/__main__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/cache.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/contents.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/generators.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/log.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/paginator.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/readers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/rstdirectives.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/server.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/settings.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/signals.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/urlwrappers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/__pycache__/writers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/cache.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/contents.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/generators.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/log.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/paginator.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/readers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/rstdirectives.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/server.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/settings.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/signals.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/css/fonts.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/css/main.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/css/pygment.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/css/reset.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/css/typogrify.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/css/wide.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.eot delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.svg delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.ttf delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff2 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/fonts/font.css delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/aboutme.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/bitbucket.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/delicious.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/facebook.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/github.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/gitorious.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/gittip.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/google-groups.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/google-plus.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/hackernews.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/lastfm.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/linkedin.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/reddit.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/rss.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/slideshare.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/speakerdeck.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/stackoverflow.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/twitter.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/vimeo.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/static/images/icons/youtube.png delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/analytics.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/archives.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/article.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/article_infos.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/author.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/authors.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/base.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/category.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/comments.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/disqus_script.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/github.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/index.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/page.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/period_archives.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/tag.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/taglist.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/tags.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/translations.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/themes/notmyidea/templates/twitter.html delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/__pycache__/pelican_import.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/__pycache__/pelican_quickstart.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/__pycache__/pelican_themes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/pelican_import.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/pelican_quickstart.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/pelican_themes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/templates/Makefile.jinja2 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/templates/pelicanconf.py.jinja2 delete mode 100755 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/templates/publishconf.py.jinja2 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/tools/templates/tasks.py.jinja2 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/urlwrappers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pelican/writers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip-20.0.2.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip-20.0.2.dist-info/LICENSE.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip-20.0.2.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip-20.0.2.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip-20.0.2.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip-20.0.2.dist-info/entry_points.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip-20.0.2.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/__main__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/__pycache__/__main__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/build_env.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/cache.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/configuration.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/exceptions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/legacy_resolve.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/locations.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/main.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/pep425tags.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/pyproject.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/build_env.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cache.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/main.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/parser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/autocompletion.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/base_command.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/cmdoptions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/command_context.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/main.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/main_parser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/parser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/req_command.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/cli/status_codes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/check.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/completion.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/debug.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/download.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/hash.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/help.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/install.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/list.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/search.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/show.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/check.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/completion.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/configuration.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/debug.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/download.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/freeze.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/hash.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/help.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/install.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/list.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/search.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/show.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/uninstall.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/commands/wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/configuration.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/base.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/base.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/installed.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/sdist.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/distributions/wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/exceptions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/index/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/index/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/index/__pycache__/collector.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/index/collector.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/index/package_finder.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/locations.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/main.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/candidate.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/format_control.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/index.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/link.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/scheme.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/target_python.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/__pycache__/wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/candidate.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/format_control.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/index.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/link.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/scheme.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/search_scope.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/selection_prefs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/target_python.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/models/wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/__pycache__/auth.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/__pycache__/cache.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/__pycache__/download.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/__pycache__/session.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/auth.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/cache.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/download.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/session.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/network/xmlrpc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/__pycache__/check.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/metadata.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/metadata_legacy.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/build/wheel_legacy.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/check.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/freeze.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/install/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/install/__pycache__/legacy.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/install/editable_legacy.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/install/legacy.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/install/wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/operations/prepare.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/pep425tags.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/pyproject.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/__pycache__/constructors.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_file.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_install.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_set.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_tracker.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/constructors.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/req_file.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/req_install.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/req_set.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/req_tracker.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/req/req_uninstall.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/self_outdated_check.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/distutils_args.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/logging.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/marker_files.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/misc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/models.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/pkg_resources.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/typing.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/ui.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/urls.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/appdirs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/deprecation.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/distutils_args.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/encoding.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/entrypoints.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/filesystem.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/filetypes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/glibc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/hashes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/inject_securetransport.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/logging.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/marker_files.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/misc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/models.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/packaging.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/pkg_resources.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/setuptools_build.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/subprocess.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/temp_dir.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/typing.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/ui.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/unpacking.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/urls.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/virtualenv.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/utils/wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/git.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/bazaar.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/git.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/mercurial.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/subversion.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/vcs/versioncontrol.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_internal/wheel_builder.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__pycache__/appdirs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__pycache__/contextlib2.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__pycache__/distro.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__pycache__/retrying.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/appdirs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/_cmd.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/adapter.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/cache.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/controller.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/filewrapper.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/heuristics.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/serialize.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/cachecontrol/wrapper.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/certifi/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/certifi/__main__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/certifi/cacert.pem delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/certifi/core.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langcyrillicmodel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/big5freq.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/big5prober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/chardistribution.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/charsetgroupprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/charsetprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/cli/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/cli/chardetect.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/codingstatemachine.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/cp949prober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/enums.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/escprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/escsm.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/eucjpprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/euckrfreq.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/euckrprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/euctwfreq.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/euctwprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/gb2312freq.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/gb2312prober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/hebrewprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/jisfreq.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/jpcntx.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/langbulgarianmodel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/langcyrillicmodel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/langgreekmodel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/langhebrewmodel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/langhungarianmodel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/langthaimodel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/langturkishmodel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/latin1prober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/mbcharsetprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/mbcsgroupprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/mbcssm.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/sbcharsetprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/sbcsgroupprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/sjisprober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/universaldetector.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/utf8prober.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/chardet/version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/ansi.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/ansitowin32.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/initialise.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/win32.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/colorama/winterm.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/contextlib2.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/misc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/shutil.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/sysconfig.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/tarfile.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/database.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/index.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/locators.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/manifest.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/markers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/metadata.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/resources.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/scripts.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/t32.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/t64.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/util.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/w32.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/w64.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distlib/wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/distro.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_ihatexml.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_inputstream.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_tokenizer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/_base.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/datrie.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_trie/py.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/_utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/constants.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/base.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/lint.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/optionaltags.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/sanitizer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/filters/whitespace.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/html5parser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/serializer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treeadapters/sax.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/base.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/dom.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/etree.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/base.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/dom.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/etree.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/core.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/codec.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/core.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/idnadata.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/intranges.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/package_data.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/idna/uts46data.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/ipaddress.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/msgpack/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/msgpack/__pycache__/_version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/msgpack/_version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/msgpack/exceptions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/msgpack/fallback.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__about__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/_typing.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/_compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/_structures.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/_typing.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/markers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/requirements.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/specifiers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/tags.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/packaging/version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/_in_process.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/build.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/check.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/colorlog.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/dirtools.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/envbuild.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/meta.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/build.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/check.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/colorlog.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/dirtools.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/envbuild.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/meta.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pep517/wrappers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pkg_resources/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pkg_resources/py31compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/progress/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/progress/bar.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/progress/counter.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/progress/spinner.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pyparsing.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/core.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/parser.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/test.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/__pycache__/writer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/core.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/parser.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/test.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/pytoml/writer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/api.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/help.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/models.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/__version__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/_internal_utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/adapters.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/api.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/auth.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/certs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/cookies.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/exceptions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/help.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/hooks.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/models.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/packages.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/sessions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/status_codes.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/structures.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/requests/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/retrying.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/six.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/_collections.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/connection.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/connectionpool.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/appengine.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/securetransport.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/contrib/socks.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/exceptions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/fields.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/filepost.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/six.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/poolmanager.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/request.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/response.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/connection.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/queue.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/request.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/response.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/retry.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/ssl_.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/timeout.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/url.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/urllib3/util/wait.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/labels.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/mklabels.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/tests.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pip/_vendor/webencodings/x_user_defined.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/__pycache__/py2_warn.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/__pycache__/py31compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/appdirs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__about__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/_compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/_structures.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/markers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/requirements.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/specifiers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/pyparsing.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/_vendor/six.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/extern/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/py2_warn.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pkg_resources/py31compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__main__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/__main__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/cmdline.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/console.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/filter.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/formatter.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/lexer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/modeline.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/plugin.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/regexopt.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/scanner.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/sphinxext.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/style.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/token.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/unistring.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/__pycache__/util.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/cmdline.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/console.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/filter.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/filters/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/filters/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatter.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/_mapping.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/bbcode.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/html.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/img.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/irc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/latex.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/other.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/rtf.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/svg.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/terminal.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/__pycache__/terminal256.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/_mapping.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/bbcode.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/html.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/img.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/irc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/latex.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/other.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/rtf.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/svg.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/terminal.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/formatters/terminal256.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_asy_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_cl_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_cocoa_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_csound_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_lasso_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_lua_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_mapping.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_mql_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_openedge_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_php_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_postgres_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_scilab_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_sourcemod_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_stan_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_stata_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_tsql_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_vbscript_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/_vim_builtins.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/actionscript.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/agile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/algebra.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/ambient.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/ampl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/apl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/archetype.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/asm.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/automation.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/basic.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/bibtex.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/boa.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/business.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/c_cpp.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/c_like.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/capnproto.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/chapel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/clean.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/compiled.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/configs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/console.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/crystal.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/csound.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/css.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/dalvik.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/data.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/diff.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/dotnet.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/dsls.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/dylan.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/ecl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/eiffel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/elm.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/email.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/erlang.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/esoteric.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/ezhil.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/factor.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/fantom.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/felix.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/floscript.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/forth.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/fortran.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/foxpro.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/freefem.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/functional.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/go.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/grammar_notation.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/graph.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/graphics.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/haskell.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/haxe.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/hdl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/hexdump.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/html.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/idl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/igor.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/inferno.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/installers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/int_fiction.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/iolang.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/j.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/javascript.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/julia.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/jvm.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/lisp.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/make.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/markup.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/math.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/matlab.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/mime.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/ml.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/modeling.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/modula2.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/monte.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/ncl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/nimrod.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/nit.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/nix.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/oberon.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/objective.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/ooc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/other.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/parasail.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/parsers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/pascal.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/pawn.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/perl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/php.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/pony.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/praat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/prolog.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/python.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/qvt.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/r.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/rdf.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/rebol.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/resource.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/rnc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/roboconf.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/robotframework.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/ruby.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/rust.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/sas.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/scdoc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/scripting.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/sgf.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/shell.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/slash.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/smalltalk.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/smv.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/snobol.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/solidity.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/special.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/sql.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/stata.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/supercollider.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/tcl.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/templates.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/teraterm.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/testing.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/text.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/textedit.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/textfmts.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/theorem.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/trafficscript.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/typoscript.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/unicon.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/urbi.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/varnish.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/verification.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/web.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/webmisc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/whiley.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/x10.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/xorg.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/__pycache__/zig.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_asy_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_cl_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_cocoa_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_csound_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_lasso_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_lua_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_mapping.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_mql_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_openedge_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_php_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_postgres_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_scilab_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_sourcemod_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_stan_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_stata_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_tsql_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_vbscript_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/_vim_builtins.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/actionscript.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/agile.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/algebra.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/ambient.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/ampl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/apl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/archetype.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/asm.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/automation.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/basic.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/bibtex.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/boa.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/business.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/c_cpp.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/c_like.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/capnproto.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/chapel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/clean.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/compiled.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/configs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/console.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/crystal.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/csound.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/css.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/dalvik.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/data.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/diff.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/dotnet.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/dsls.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/dylan.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/ecl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/eiffel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/elm.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/email.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/erlang.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/esoteric.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/ezhil.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/factor.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/fantom.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/felix.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/floscript.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/forth.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/fortran.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/foxpro.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/freefem.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/functional.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/go.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/grammar_notation.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/graph.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/graphics.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/haskell.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/haxe.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/hdl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/hexdump.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/html.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/idl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/igor.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/inferno.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/installers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/int_fiction.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/iolang.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/j.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/javascript.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/julia.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/jvm.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/lisp.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/make.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/markup.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/math.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/matlab.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/mime.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/ml.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/modeling.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/modula2.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/monte.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/ncl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/nimrod.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/nit.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/nix.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/oberon.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/objective.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/ooc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/other.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/parasail.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/parsers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/pascal.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/pawn.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/perl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/php.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/pony.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/praat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/prolog.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/python.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/qvt.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/r.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/rdf.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/rebol.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/resource.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/rnc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/roboconf.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/robotframework.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/ruby.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/rust.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/sas.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/scdoc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/scripting.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/sgf.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/shell.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/slash.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/smalltalk.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/smv.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/snobol.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/solidity.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/special.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/sql.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/stata.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/supercollider.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/tcl.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/templates.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/teraterm.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/testing.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/text.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/textedit.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/textfmts.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/theorem.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/trafficscript.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/typoscript.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/unicon.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/urbi.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/varnish.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/verification.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/web.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/webmisc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/whiley.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/x10.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/xorg.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/lexers/zig.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/modeline.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/plugin.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/regexopt.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/scanner.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/sphinxext.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/style.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/abap.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/algol.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/algol_nu.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/arduino.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/autumn.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/borland.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/bw.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/colorful.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/default.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/emacs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/friendly.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/fruity.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/igor.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/inkpot.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/lovelace.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/manni.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/monokai.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/murphy.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/native.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/paraiso_dark.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/paraiso_light.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/pastie.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/perldoc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/rainbow_dash.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/rrt.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/sas.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/solarized.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/stata_dark.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/stata_light.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/tango.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/trac.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/vim.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/vs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/__pycache__/xcode.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/abap.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/algol.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/algol_nu.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/arduino.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/autumn.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/borland.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/bw.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/colorful.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/default.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/emacs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/friendly.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/fruity.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/igor.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/inkpot.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/lovelace.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/manni.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/monokai.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/murphy.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/native.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/paraiso_dark.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/paraiso_light.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/pastie.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/perldoc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/rainbow_dash.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/rrt.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/sas.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/solarized.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/stata_dark.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/stata_light.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/tango.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/trac.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/vim.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/vs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/styles/xcode.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/token.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/unistring.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pygments/util.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/python_dateutil-2.8.1.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/python_dateutil-2.8.1.dist-info/LICENSE delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/python_dateutil-2.8.1.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/python_dateutil-2.8.1.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/python_dateutil-2.8.1.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/python_dateutil-2.8.1.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/python_dateutil-2.8.1.dist-info/zip-safe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/DESCRIPTION.rst delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/LICENSE.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/metadata.json delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz-2019.3.dist-info/zip-safe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/__pycache__/exceptions.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/__pycache__/lazy.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/__pycache__/reference.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/__pycache__/tzfile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/__pycache__/tzinfo.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/exceptions.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/lazy.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/reference.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/tzfile.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/tzinfo.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Abidjan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Accra delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Addis_Ababa delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Algiers delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Asmara delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Asmera delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Bamako delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Bangui delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Banjul delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Bissau delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Blantyre delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Brazzaville delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Bujumbura delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Cairo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Casablanca delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Ceuta delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Conakry delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Dakar delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Dar_es_Salaam delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Djibouti delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Douala delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/El_Aaiun delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Freetown delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Gaborone delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Harare delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Johannesburg delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Juba delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Kampala delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Khartoum delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Kigali delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Kinshasa delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Lagos delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Libreville delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Lome delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Luanda delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Lubumbashi delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Lusaka delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Malabo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Maputo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Maseru delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Mbabane delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Mogadishu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Monrovia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Nairobi delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Ndjamena delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Niamey delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Nouakchott delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Ouagadougou delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Porto-Novo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Sao_Tome delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Timbuktu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Tripoli delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Tunis delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Africa/Windhoek delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Adak delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Anchorage delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Anguilla delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Antigua delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Araguaina delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Buenos_Aires delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Catamarca delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/ComodRivadavia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Cordoba delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Jujuy delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/La_Rioja delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Mendoza delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Rio_Gallegos delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Salta delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/San_Juan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/San_Luis delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Tucuman delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Argentina/Ushuaia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Aruba delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Asuncion delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Atikokan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Atka delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Bahia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Bahia_Banderas delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Barbados delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Belem delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Belize delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Blanc-Sablon delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Boa_Vista delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Bogota delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Boise delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Buenos_Aires delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Cambridge_Bay delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Campo_Grande delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Cancun delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Caracas delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Catamarca delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Cayenne delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Cayman delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Chicago delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Chihuahua delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Coral_Harbour delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Cordoba delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Costa_Rica delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Creston delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Cuiaba delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Curacao delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Danmarkshavn delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Dawson delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Dawson_Creek delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Denver delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Detroit delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Dominica delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Edmonton delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Eirunepe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/El_Salvador delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Ensenada delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Fort_Nelson delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Fort_Wayne delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Fortaleza delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Glace_Bay delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Godthab delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Goose_Bay delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Grand_Turk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Grenada delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Guadeloupe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Guatemala delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Guayaquil delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Guyana delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Halifax delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Havana delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Hermosillo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indiana/Indianapolis delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indiana/Knox delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indiana/Marengo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indiana/Petersburg delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indiana/Tell_City delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indiana/Vevay delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indiana/Vincennes delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indiana/Winamac delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Indianapolis delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Inuvik delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Iqaluit delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Jamaica delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Jujuy delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Juneau delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Kentucky/Louisville delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Kentucky/Monticello delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Knox_IN delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Kralendijk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/La_Paz delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Lima delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Los_Angeles delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Louisville delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Lower_Princes delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Maceio delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Managua delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Manaus delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Marigot delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Martinique delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Matamoros delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Mazatlan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Mendoza delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Menominee delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Merida delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Metlakatla delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Mexico_City delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Miquelon delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Moncton delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Monterrey delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Montevideo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Montreal delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Montserrat delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Nassau delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/New_York delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Nipigon delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Nome delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Noronha delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/North_Dakota/Beulah delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/North_Dakota/Center delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/North_Dakota/New_Salem delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Ojinaga delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Panama delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Pangnirtung delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Paramaribo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Phoenix delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Port-au-Prince delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Port_of_Spain delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Porto_Acre delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Porto_Velho delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Puerto_Rico delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Punta_Arenas delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Rainy_River delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Rankin_Inlet delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Recife delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Regina delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Resolute delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Rio_Branco delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Rosario delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Santa_Isabel delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Santarem delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Santiago delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Santo_Domingo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Sao_Paulo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Scoresbysund delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Shiprock delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Sitka delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/St_Barthelemy delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/St_Johns delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/St_Kitts delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/St_Lucia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/St_Thomas delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/St_Vincent delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Swift_Current delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Tegucigalpa delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Thule delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Thunder_Bay delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Tijuana delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Toronto delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Tortola delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Vancouver delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Virgin delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Whitehorse delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Winnipeg delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Yakutat delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/America/Yellowknife delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Casey delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Davis delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/DumontDUrville delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Macquarie delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Mawson delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/McMurdo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Palmer delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Rothera delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/South_Pole delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Syowa delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Troll delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Antarctica/Vostok delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Arctic/Longyearbyen delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Aden delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Almaty delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Amman delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Anadyr delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Aqtau delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Aqtobe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Ashgabat delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Ashkhabad delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Atyrau delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Baghdad delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Bahrain delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Baku delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Bangkok delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Barnaul delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Beirut delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Bishkek delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Brunei delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Calcutta delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Chita delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Choibalsan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Chongqing delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Chungking delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Colombo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Dacca delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Damascus delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Dhaka delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Dili delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Dubai delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Dushanbe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Famagusta delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Gaza delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Harbin delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Hebron delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Ho_Chi_Minh delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Hong_Kong delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Hovd delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Irkutsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Istanbul delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Jakarta delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Jayapura delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Jerusalem delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Kabul delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Kamchatka delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Karachi delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Kashgar delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Kathmandu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Katmandu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Khandyga delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Kolkata delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Krasnoyarsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Kuala_Lumpur delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Kuching delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Kuwait delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Macao delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Macau delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Magadan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Makassar delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Manila delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Muscat delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Nicosia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Novokuznetsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Novosibirsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Omsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Oral delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Phnom_Penh delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Pontianak delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Pyongyang delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Qatar delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Qostanay delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Qyzylorda delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Rangoon delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Riyadh delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Saigon delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Sakhalin delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Samarkand delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Seoul delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Shanghai delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Singapore delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Srednekolymsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Taipei delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Tashkent delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Tbilisi delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Tehran delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Tel_Aviv delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Thimbu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Thimphu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Tokyo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Tomsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Ujung_Pandang delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Ulaanbaatar delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Ulan_Bator delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Urumqi delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Ust-Nera delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Vientiane delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Vladivostok delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Yakutsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Yangon delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Yekaterinburg delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Asia/Yerevan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Azores delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Bermuda delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Canary delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Cape_Verde delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Faeroe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Faroe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Jan_Mayen delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Madeira delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Reykjavik delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/South_Georgia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/St_Helena delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Atlantic/Stanley delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/ACT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Adelaide delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Brisbane delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Broken_Hill delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Canberra delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Currie delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Darwin delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Eucla delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Hobart delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/LHI delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Lindeman delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Lord_Howe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Melbourne delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/NSW delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/North delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Perth delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Queensland delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/South delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Sydney delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Tasmania delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Victoria delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/West delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Australia/Yancowinna delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Brazil/Acre delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Brazil/DeNoronha delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Brazil/East delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Brazil/West delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/CET delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/CST6CDT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Canada/Atlantic delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Canada/Central delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Canada/Eastern delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Canada/Mountain delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Canada/Newfoundland delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Canada/Pacific delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Canada/Saskatchewan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Canada/Yukon delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Chile/Continental delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Chile/EasterIsland delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Cuba delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/EET delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/EST delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/EST5EDT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Egypt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Eire delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+0 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+1 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+10 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+11 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+12 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+2 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+3 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+4 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+5 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+6 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+7 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+8 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT+9 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-0 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-1 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-10 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-11 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-12 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-13 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-14 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-2 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-3 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-4 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-5 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-6 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-7 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-8 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT-9 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/GMT0 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/Greenwich delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/UCT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/UTC delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/Universal delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Etc/Zulu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Amsterdam delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Andorra delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Astrakhan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Athens delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Belfast delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Belgrade delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Berlin delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Bratislava delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Brussels delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Bucharest delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Budapest delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Busingen delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Chisinau delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Copenhagen delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Dublin delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Gibraltar delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Guernsey delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Helsinki delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Isle_of_Man delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Istanbul delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Jersey delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Kaliningrad delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Kiev delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Kirov delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Lisbon delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Ljubljana delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/London delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Luxembourg delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Madrid delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Malta delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Mariehamn delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Minsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Monaco delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Moscow delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Nicosia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Oslo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Paris delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Podgorica delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Prague delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Riga delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Rome delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Samara delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/San_Marino delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Sarajevo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Saratov delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Simferopol delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Skopje delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Sofia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Stockholm delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Tallinn delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Tirane delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Tiraspol delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Ulyanovsk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Uzhgorod delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Vaduz delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Vatican delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Vienna delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Vilnius delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Volgograd delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Warsaw delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Zagreb delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Zaporozhye delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Europe/Zurich delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Factory delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/GB delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/GB-Eire delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/GMT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/GMT+0 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/GMT-0 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/GMT0 delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Greenwich delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/HST delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Hongkong delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Iceland delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Antananarivo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Chagos delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Christmas delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Cocos delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Comoro delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Kerguelen delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Mahe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Maldives delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Mauritius delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Mayotte delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Indian/Reunion delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Iran delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Israel delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Jamaica delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Japan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Kwajalein delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Libya delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/MET delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/MST delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/MST7MDT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Mexico/BajaNorte delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Mexico/BajaSur delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Mexico/General delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/NZ delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/NZ-CHAT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Navajo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/PRC delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/PST8PDT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Apia delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Auckland delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Bougainville delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Chatham delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Chuuk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Easter delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Efate delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Enderbury delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Fakaofo delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Fiji delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Funafuti delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Galapagos delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Gambier delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Guadalcanal delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Guam delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Honolulu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Johnston delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Kiritimati delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Kosrae delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Kwajalein delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Majuro delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Marquesas delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Midway delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Nauru delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Niue delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Norfolk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Noumea delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Pago_Pago delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Palau delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Pitcairn delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Pohnpei delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Ponape delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Port_Moresby delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Rarotonga delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Saipan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Samoa delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Tahiti delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Tarawa delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Tongatapu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Truk delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Wake delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Wallis delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Pacific/Yap delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Poland delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Portugal delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/ROC delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/ROK delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Singapore delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Turkey delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/UCT delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Alaska delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Aleutian delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Arizona delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Central delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/East-Indiana delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Eastern delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Hawaii delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Indiana-Starke delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Michigan delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Mountain delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Pacific delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/US/Samoa delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/UTC delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Universal delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/W-SU delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/WET delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/Zulu delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/iso3166.tab delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/leapseconds delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/posixrules delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/tzdata.zi delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/zone.tab delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/pytz/zoneinfo/zone1970.tab delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/LICENSE delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/dependency_links.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/entry_points.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools-45.2.0.dist-info/zip-safe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/_deprecation_warning.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/_imp.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/archive_util.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/build_meta.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/config.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/dep_util.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/depends.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/dist.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/errors.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/extension.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/glob.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/installer.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/launch.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/monkey.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/msvc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/namespaces.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/package_index.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/py27compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/py31compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/py33compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/py34compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/sandbox.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/site-patch.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/ssl_support.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/unicode_utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/__pycache__/windows_support.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_deprecation_warning.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_imp.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/__pycache__/ordered_set.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/__pycache__/pyparsing.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/ordered_set.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__about__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/_compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/tags.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/_compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/_structures.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/markers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/requirements.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/specifiers.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/tags.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/packaging/version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/pyparsing.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/_vendor/six.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/archive_util.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/build_meta.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/cli-32.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/cli-64.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/cli.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/alias.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/build_clib.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/build_ext.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/build_py.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/develop.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/dist_info.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/easy_install.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/egg_info.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/install.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/install_lib.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/install_scripts.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/py36compat.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/register.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/rotate.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/saveopts.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/sdist.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/setopt.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/test.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/upload.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/__pycache__/upload_docs.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/alias.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/bdist_egg.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/bdist_rpm.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/bdist_wininst.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/build_clib.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/build_ext.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/build_py.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/develop.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/dist_info.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/easy_install.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/egg_info.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/install.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/install_egg_info.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/install_lib.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/install_scripts.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/launcher manifest.xml delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/py36compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/register.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/rotate.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/saveopts.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/sdist.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/setopt.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/test.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/upload.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/command/upload_docs.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/config.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/dep_util.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/depends.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/dist.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/errors.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/extension.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/extern/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/extern/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/glob.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/gui-32.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/gui-64.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/gui.exe delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/installer.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/launch.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/lib2to3_ex.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/monkey.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/msvc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/namespaces.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/package_index.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/py27compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/py31compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/py33compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/py34compat.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/sandbox.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/script (dev).tmpl delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/script.tmpl delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/site-patch.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/ssl_support.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/unicode_utils.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/setuptools/windows_support.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/six-1.14.0.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/six-1.14.0.dist-info/LICENSE delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/six-1.14.0.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/six-1.14.0.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/six-1.14.0.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/six-1.14.0.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/six.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__main__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/__main__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/util.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x000.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x001.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x002.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x003.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x004.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x005.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x006.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x007.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x009.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x00a.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x00b.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x00c.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x00d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x00e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x00f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x010.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x011.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x012.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x013.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x014.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x015.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x016.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x017.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x018.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x01d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x01e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x01f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x020.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x021.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x022.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x023.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x024.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x025.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x026.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x027.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x028.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x029.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x02a.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x02c.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x02e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x02f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x030.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x031.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x032.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x033.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x04d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x04e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x04f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x050.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x051.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x052.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x053.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x054.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x055.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x056.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x057.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x058.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x059.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x05a.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x05b.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x05c.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x05d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x05e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x05f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x060.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x061.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x062.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x063.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x064.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x065.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x066.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x067.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x068.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x069.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x06a.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x06b.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x06c.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x06d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x06e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x06f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x070.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x071.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x072.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x073.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x074.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x075.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x076.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x077.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x078.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x079.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x07a.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x07b.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x07c.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x07d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x07e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x07f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x080.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x081.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x082.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x083.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x084.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x085.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x086.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x087.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x088.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x089.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x08a.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x08b.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x08c.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x08d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x08e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x08f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x090.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x091.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x092.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x093.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x094.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x095.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x096.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x097.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x098.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x099.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x09a.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x09b.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x09c.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x09d.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x09e.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x09f.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0a0.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0a1.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0a2.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0a3.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0a4.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0ac.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0ad.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0ae.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0af.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b0.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b1.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b2.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b3.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b4.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b5.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b6.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b7.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b8.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0b9.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0ba.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0bb.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0bc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0bd.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0be.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0bf.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c0.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c1.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c2.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c3.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c4.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c5.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c6.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c7.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c8.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0c9.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0ca.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0cb.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0cc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0cd.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0ce.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0cf.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0d0.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0d1.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0d2.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0d3.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0d4.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0d5.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0d6.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0d7.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0f9.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0fa.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0fb.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0fc.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0fd.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0fe.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x0ff.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x1d4.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x1d5.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x1d6.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x1d7.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/__pycache__/x1f1.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/util.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x000.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x001.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x002.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x003.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x004.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x005.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x006.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x007.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x009.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x00a.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x00b.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x00c.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x00d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x00e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x00f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x010.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x011.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x012.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x013.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x014.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x015.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x016.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x017.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x018.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x01d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x01e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x01f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x020.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x021.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x022.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x023.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x024.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x025.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x026.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x027.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x028.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x029.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x02a.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x02c.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x02e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x02f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x030.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x031.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x032.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x033.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x04d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x04e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x04f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x050.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x051.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x052.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x053.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x054.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x055.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x056.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x057.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x058.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x059.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x05a.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x05b.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x05c.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x05d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x05e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x05f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x060.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x061.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x062.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x063.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x064.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x065.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x066.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x067.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x068.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x069.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x06a.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x06b.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x06c.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x06d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x06e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x06f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x070.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x071.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x072.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x073.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x074.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x075.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x076.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x077.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x078.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x079.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x07a.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x07b.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x07c.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x07d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x07e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x07f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x080.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x081.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x082.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x083.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x084.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x085.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x086.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x087.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x088.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x089.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x08a.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x08b.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x08c.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x08d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x08e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x08f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x090.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x091.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x092.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x093.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x094.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x095.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x096.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x097.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x098.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x099.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x09a.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x09b.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x09c.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x09d.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x09e.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x09f.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0a0.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0a1.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0a2.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0a3.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0a4.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0ac.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0ad.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0ae.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0af.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b0.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b1.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b2.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b3.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b4.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b5.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b6.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b7.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b8.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0b9.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0ba.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0bb.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0bc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0bd.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0be.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0bf.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c0.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c1.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c2.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c3.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c4.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c5.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c6.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c7.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c8.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0c9.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0ca.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0cb.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0cc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0cd.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0ce.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0cf.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0d0.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0d1.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0d2.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0d3.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0d4.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0d5.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0d6.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0d7.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0f9.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0fa.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0fb.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0fc.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0fd.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0fe.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x0ff.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x1d4.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x1d5.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x1d6.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x1d7.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/unidecode/x1f1.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel-0.34.2.dist-info/INSTALLER delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel-0.34.2.dist-info/LICENSE.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel-0.34.2.dist-info/METADATA delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel-0.34.2.dist-info/RECORD delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel-0.34.2.dist-info/WHEEL delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel-0.34.2.dist-info/entry_points.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel-0.34.2.dist-info/top_level.txt delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__main__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/__main__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/_version.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/bdist_wheel.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/macosx_libfile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/metadata.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/pep425tags.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/pkginfo.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/util.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/__pycache__/wheelfile.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/_version.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/bdist_wheel.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/__init__.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/__pycache__/convert.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/__pycache__/install.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/__pycache__/pack.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/__pycache__/unpack.cpython-38.pyc delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/convert.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/install.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/pack.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/cli/unpack.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/macosx_libfile.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/metadata.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/pep425tags.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/pkginfo.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/util.py delete mode 100644 blog-generator/venv/lib/python3.8/site-packages/wheel/wheelfile.py delete mode 100644 blog-generator/venv/lib/python3.8/site.py delete mode 120000 blog-generator/venv/lib/python3.8/sre_compile.py delete mode 120000 blog-generator/venv/lib/python3.8/sre_constants.py delete mode 120000 blog-generator/venv/lib/python3.8/sre_parse.py delete mode 120000 blog-generator/venv/lib/python3.8/stat.py delete mode 120000 blog-generator/venv/lib/python3.8/struct.py delete mode 120000 blog-generator/venv/lib/python3.8/tarfile.py delete mode 120000 blog-generator/venv/lib/python3.8/tempfile.py delete mode 120000 blog-generator/venv/lib/python3.8/token.py delete mode 120000 blog-generator/venv/lib/python3.8/tokenize.py delete mode 120000 blog-generator/venv/lib/python3.8/types.py delete mode 120000 blog-generator/venv/lib/python3.8/warnings.py delete mode 120000 blog-generator/venv/lib/python3.8/weakref.py create mode 100644 content/cgu.md rename public/index.html => content/pages/home.html (79%) rename {public => content/static}/img/cloud.svg (100%) rename {public => content/static}/img/docker.svg (100%) rename {public => content/static}/img/git.svg (100%) rename {public => content/static}/img/github.svg (100%) rename {public => content/static}/img/latex.svg (100%) rename {public => content/static}/img/video.svg (100%) rename {blog-generator/content => content}/test.md (100%) rename blog-generator/pelicanconf.py => pelicanconf.py (76%) delete mode 100644 public/blog/.auto-generated-dir delete mode 100644 public/cgu.html delete mode 100755 public/tutos/get_url_dav_nc_contacts.png rename blog-generator/publishconf.py => publishconf.py (100%) rename blog-generator/tasks.py => tasks.py (100%) rename {public => themes/jean-cloud/static}/css/SourceSansPro-SemiBold (100%) rename {public => themes/jean-cloud/static}/css/font-sourcesanspro.css (100%) rename {public => themes/jean-cloud/static}/css/fontawesome-all.min.css (100%) rename {public => themes/jean-cloud/static}/css/helios.css (100%) rename {public => themes/jean-cloud/static}/css/main.css (99%) rename {public => themes/jean-cloud/static}/css/solid-state.css (100%) rename {public => themes/jean-cloud/static}/fonts/SourceSansPro-Italic.ttf (100%) rename {public => themes/jean-cloud/static}/fonts/SourceSansPro-Light.ttf (100%) rename {public => themes/jean-cloud/static}/fonts/SourceSansPro-LightItalic.ttf (100%) rename {public => themes/jean-cloud/static}/fonts/SourceSansPro-Regular.ttf (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/archives.html (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/article.html (100%) rename blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple/templates/index.html => themes/jean-cloud/templates/articles.html (96%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/author.html (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/authors.html (100%) create mode 100644 themes/jean-cloud/templates/base.html rename blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple/templates/base.html => themes/jean-cloud/templates/base.html.bak (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/categories.html (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/category.html (85%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/gosquared.html (100%) create mode 100644 themes/jean-cloud/templates/header.html create mode 100644 themes/jean-cloud/templates/index.html rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/page.html (95%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/pagination.html (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/period_archives.html (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/tag.html (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/tags.html (100%) rename {blog-generator/venv/lib/python3.8/site-packages/pelican/themes/simple => themes/jean-cloud}/templates/translations.html (100%) diff --git a/.gitignore b/.gitignore index 4c286f5..2ace95c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ -public/blog +public/ +venv/ +__pycache__ diff --git a/public/503.html b/503.html similarity index 100% rename from public/503.html rename to 503.html diff --git a/blog-generator/Makefile b/Makefile similarity index 98% rename from blog-generator/Makefile rename to Makefile index 09f2acb..6fcf43f 100644 --- a/blog-generator/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ PELICANOPTS= BASEDIR=$(CURDIR) INPUTDIR=$(BASEDIR)/content -OUTPUTDIR=$(BASEDIR)../public/blog +OUTPUTDIR=$(BASEDIR)/public CONFFILE=$(BASEDIR)/pelicanconf.py PUBLISHCONF=$(BASEDIR)/publishconf.py diff --git a/blog-generator/venv/bin/__pycache__/rst2html.cpython-38.pyc b/blog-generator/venv/bin/__pycache__/rst2html.cpython-38.pyc deleted file mode 100644 index 6fb0c36e4ea79220508d44a1dd2000f643ce5e85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmYjN&59H;5KhuP-Q$ddqJrQlM;n}Oe_&4{yC}>aMiF+@wGYPFsdb`Bx=qroJMZ8- z=+T$)0dn=^D|pd_RoDvosDi5RtFK-x7Bdv%$J>{04hcd(Q*kkhSnS8|HW37B(e9SO zf+*Z#z+VaA51Gim5sY3Ta~Y%bUL!+}QS8c9t|#q87j1!&m_Tt8wIxhM0i`Iv#2G=3 zP&M7{&km@TMry9;iS3Q2US!?Dr4=-F zo*ThcZ-81j@^aRYltQsg)iqGh9QMUy!P%p=2zQGZqTf zcU(cZ)>IhuiYA3-cn zw*YF%9#{>Z_RgCBRLi^dy}ep+&zp1SuCdPFPaD_6S(rZ5@rnu_m66unh>+(5Pw_Qe N;DTJu2qu5>>@W5OoWcMA diff --git a/blog-generator/venv/bin/__pycache__/rst2html4.cpython-38.pyc b/blog-generator/venv/bin/__pycache__/rst2html4.cpython-38.pyc deleted file mode 100644 index d1797251caab8639885c6b70dcf526a67f147f45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 667 zcmY*XO^(wr6t>eQDH$pdAR)2xaw5^Rh0&}KVg%C6q9CLxP_iJH_;niaPq1G!)82tQ zz>*uVb7{CNBF&G&$ipIvZyL_T=rmz#SK zBqy6Yf{H-WoC5tE0Da#Ry)OYJuZX@%NjF~;9W01v^<`g$d8nd1qC|uc-6nYqp@<+B z@h5*r1ji&DY`!H2OjWv4T(YG#8X0K8&@fy9dt%B4E9uzt=AEqE3hZ50TO*pX(kE

3<}) z3uh(N$h;UUrE#4hs2bM{`H4%j%J~b|l24>+HZBt@nLCoO{nKO+o!DWo);R==9OM`sp z)K&<#&|E>gbIB_mv~f{*^`dAaX-Y1kz2X4>ZKK)a;$Sw*hn;`d->ftiY|j^D`yGTH zz7pI0jxGE?8l$SmbybfVUGwq-h|%c^K#q$0R>8;p_4q<+G|8s>nc&FB=cT)`b$D-^ la#pX~!2{*rPr}34i@RGM`f)%9^ahP+6kP8GH2Bl+{RJpR#)SX? diff --git a/blog-generator/venv/bin/__pycache__/rst2html5.cpython-38.pyc b/blog-generator/venv/bin/__pycache__/rst2html5.cpython-38.pyc deleted file mode 100644 index 43efa4b10cc0769f792b14760af5e84cfb7d3886..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmZWn&2G~`5Z-kh+jWVE0D;75k3=F)3$!PMs3@X`fRGxX_)xQWCynX;nAx@3HEI<*?lz_q{Q3zcdw66LPCCY$z@A?^4MQ{?42Mv zS=|;?1d`?y=;r|Fho0zt2`G6(^v#g?JUmVD0VUmeOLTBVJU*0t73GnN^OzFRhxiuB z6Np3viHJXWwg?W%C|P|?_n4}5rMP5sG}VS&c?C zWu;Hp!R+~z?J(g%3beCXn$A4QG_GzOhDM}?|rJ=npV9p!q3IVpns_rPO z{b!)T)4~4NXE&!})^RPkG#VJfp~I$h4T6}#xntHeSbApLUpOUqMnS%LhLr;>G*{4W zUMe)&Xyc;rO&3KQNmFtO?S=*SH;krFioNNy?LS2{m=C&TbsNn}gMd9h6#73vF!Jsj z!7E+dxnBnpr|L;v)#FCjygUUlK3f3Dad96NeB515{z;9uvhCeWaK|SXZcW>Q! iRxjJ+q4F;#;nC3R+8f@5aX=G#jSguP3tMVbYwDk_j*Q6WSJ7_uOk_;l*QmtZ@Z%RBH6 zu;gWUfNWW@V$TYv8I6#zOu(3Zu7E%1=)BO(3#0#&o5rUZz#0+eTkq>f zdES9_rDlDGjj<<~Y4qKJ%NvI_m!XdHZ0nU=Ksevs(58_xpl{Hkt}rWxJ5d@H`#Tg{ zYNoK=4=|M#bqAA<+EG~s*RpIAX(}eM-E-)#rpf9_xm>M^=`~PgEZXobh>b(|PV8Pc z@4}zwxmR^wi+a}RnpK~W&(5}pa#lXH3O^rST$eSwm)$?iIP)y;NnCE7f6$jyU$o=7 b3ePHWF$%u!W(aW{(J{S66PiQ^Q9Sw!`-0E2 diff --git a/blog-generator/venv/bin/__pycache__/rst2man.cpython-38.pyc b/blog-generator/venv/bin/__pycache__/rst2man.cpython-38.pyc deleted file mode 100644 index 1aa2bd52327463984d743313dc0d464a2003a705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmYjO&2AGh5VoDf*=!q8g#%X~$srqlq@DnQkl+$H&_ZDkEM`3=277n$4{h@bh<9j@ zybKSpS5CYFC&mq+j^$7D^XZ!z`{i_+6SN=iUcG(B2>F?UtHv>Sh}SCwMM|QmVuqG< zGXr|gfPNgP!3Cq_h%~#Dr1OR}>~-P|&Crg@k>w?)DIS@z&B_dY4*UiwCoqESJij0? zQR8o@q1XYLXPd9Nl}*u|<@YZw&kxty3)`w_Kyku8NLpTk>x6##5Q3r+Ba5Gc;KbM-q{wRZY(RUxsedT!cU8t5k;!e5uK9#@Z6t8$v8f;PUW zTL*4{1G^zYx%a=Y758qGYGZ_+A6>q~cjBfgm*Dr4Ww70{)7>KC0`(_Qi<32gSyXqO zh0ptE%YTB4TgC1DLdhVP+s*yb`EUnU!*A=ed)vQykUIGp!Z6Dyqch4WXM1#)W$X{& C=((~0 diff --git a/blog-generator/venv/bin/__pycache__/rst2odt.cpython-38.pyc b/blog-generator/venv/bin/__pycache__/rst2odt.cpython-38.pyc deleted file mode 100644 index cee543b9589bd738df4c79921d7a7b2bd9c2376a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmYk3zmL-}6vu5Rb<(tj3I={mUMtZA4(TR@IB_}{DvCJZAV`E<{7M6f9c)KOyE5}X zz{o$tACQ%am67GJTj0)5{>oqbSs%aWXQNSs?D+oX`RiWrg;hY(pE0fi9^VZejWUV4F(Lo^B352HP{P*NBMf-@tTSpwUaMQh4Rv&Zdm zRq7?E8>~^1w?!%5vUvkyzF3q6Fm4lT5Jtz*Pg@Ck)S(IKt~J|hSyA(<6p$I29hV|k ztL`#~Mc!5>1sM=sUda}h1&cEhj7i5_&EXz7iuXIN% zS>zRTeGTUClFsgDd$U3}KiCpx=EU{nYNPeghuvBwl#ubMOKDzza|P3OrE8dufSyswI!dp7G3h=I43PY6S?!AKyKE z^t+4DUuJW0Sg`pLrc^*EiV($=WH=`g!G^aoE4L%N=IzXh95}NxH*#ThGB5Wd|6JCH z8nrBl0_swa`oEB9g*IsL6N;L2g*IVru{LcT5>c|&8G?KEF6y?YKLlIpNtlGkT+m)A z_=ri#MQ@K4OeBiYP^#06$u&+@IOZaR^;o2eiEtv>AlwwZ49jGXg)*J8K$dKjj?+=1 zQeMb#EO`FHz)7BkX%X(;|7Lp_Z{67*8k1|mGk7}cV%;u9TBvwDDMscloH$Gg#&&@7 z@0!Z3OT4l9^6{HIsNq2E}Y1$H|D(& z&r68>amLK$F40bHNs}=jVH4;1Xu#^hybV+S2}GeeuFwL{aE0fDV&I6f=5|GZvnuPr zp+vdVdP+9Yw;#^z%0BRbyEbzwXYNxQWKIWN1q))`$SUV^bhLhSLp9FO%r(|kFkh)$ z>UI$I7KC~V9W)o#%maU|1p-^^Gr#f=+7v^Df33XvrOJm0UaPDHUI3boeq5fJ_>A6# z)5{A$1Dw~Zx-x$q{P-ON?=dJufRe_}G&qL=BzStQ-(P0f)V-G_r+lIebV?>v$|Mvl zsH;;Z0H&$^{dGAL0DmM*4mCc0X4dYi_NHk$PBW&xC@r@PV+)p0VZMb940fafQ0zs{ z36y1D2Rj>I4|nfw+#c>~H&GyatRb#MD0!T!ePNq>giGy?sX>KqMtAPUo5QW`jr+q* z?We_Iwl%00T?xABYO%d(KdXO{5K>*xcT?JzRJsfnU=jt0f{+ew0FGESk{X_7CAdw zKkXY3gG1T7xpr%PjV3DT%aKS+CHq3EkKnh&rC{ZGA<9$Tc)5KCJjf4#AQIpJri;mQ zvtGeX;^I|oKew$W4)7|uN_^~N@gC@o%!L<&0AmtZWBL&=fG`X_1^rAqXoeK2&>8Fx zE%BAIlnqkA^ix2HvZz(-+6KWF&e0tD)B*#xpx1y6tN^WNu&*)Y>QZtiuYkJOuJvgz`Usjr05vIWkZagI-ul`fsg+M1*X6a diff --git a/blog-generator/venv/bin/__pycache__/rst2pseudoxml.cpython-38.pyc b/blog-generator/venv/bin/__pycache__/rst2pseudoxml.cpython-38.pyc deleted file mode 100644 index 2e0b692aa222c720a50fbf3b6fe8005d17050ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmYjO$&S=85Vf7HX=s54BqUBg5{V=%(wxwU5eP0}5d+MS10mSebihmSB4+v@_y;)h zGkidRXG030=FeT`#I z1a2_kuLSUih)3TDM#o59z-T(Jks>E3uwoI*q)BAjq!{r8(yOS+Ac2ghUvPLKM<~zM z59fze_Nteipi85bqo6o-nz|Lx2by`;3rnB*ccQl|FgNI6H217m@9AK{b6uP~uFLta zpbtG6QBKB-!5yEaY5YYC}V^+X(Sy&=zc7QkvuO{7#>IHfC+hHEY{36`FMd#&Z_j zKR2!Kw}*AzECORQY00z!6NO<+JV6rRJ2KNRZQyrZIXP5AKNMaK9s3Bp_`CuTMSI6c z__Tjk{V!GAEN|_XymMW(9otsMy4%~Wok~#-XXEUy4BHfNkc9^JN`N>fc!u|Iic@ka JBAEP%qrVWlpVj~X diff --git a/blog-generator/venv/bin/__pycache__/rst2s5.cpython-38.pyc b/blog-generator/venv/bin/__pycache__/rst2s5.cpython-38.pyc deleted file mode 100644 index 8ec4bd346abf5b7ee5f5af17fffa3d792203212a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmYk3&5qMB5XWujt8}SAfP}=!Mu5#f{{b-;#wN1YsF8THJ*bJ+*|I~z#rPC^HL#y-n~;2*WhmO)>+Xt(wy=qtEUT&N(w;U zVK^BNImWZ7r(vE=^%vH>-fjzE@#z|$_^X9#hb`9n>t4$@ELh3V?HauBE%1>a) zib_B{{)K$xSxX|?UaNN{c~J@_HShe z6s|EKPGIYptr}Bc;i@udR@PE+Co9c1(ycqzQ!PEjlyA5J=9xZoBe@s<3yG!3+*!x$ z1#ofcJKKrR*)0Jp-YCbUMHnG<#E^(>jP%Snl$ikQr0%T$ORpLi#f&Wg*lg`weUv1= zK|jEF=Ya5M5NmM$hfNv_Cc!>n8?Rld=3R4s?yE*A9Ki|<=mO$wumwztf^5G-F}da? zwEGBC7+L!{M8kHN=ct7DrQVJx`g$&SP(#=3hQZCszXqgjcM ZMZtWCy7oGTem|fidV_{E3=V?+=nrZ!?F0Y- diff --git a/blog-generator/venv/bin/__pycache__/rst2xml.cpython-38.pyc b/blog-generator/venv/bin/__pycache__/rst2xml.cpython-38.pyc deleted file mode 100644 index 0352b033019b2ca3c7b358f2bb226692f56febd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmYjO%Wl*#6t$g9GR!an0TL1`Z$}~t52-7Js6afV0aa>&k_E=tw~WD$U^}#(f8ZZr z$A;PV`afKzI7rT7@Mq+}t=dIm{PtT5=fP*mkk3aLKjI7W^D!Uc$NeUnuIW@)^|s^U9mwi% z4WKJ_(;Ildb=>@ws;<@7w`$2FZ%(X-#)o(#4P1A}!}OL(uc_g7nN-821bI&I6kosv NF39G)Kza?8Lr7T4hA?EK zPjRS52PoUxoQ(I0=ZX6N}Lz+JcRPGdt)Z3GfZse!_p@*VDO|W^TBdwaU=?1F+d?10ZJAT`S>acRl|{ zHM^DH-pv{Hbbi(YH@D6Q2X}f0xmkCkJsD;o;QlbsyXyf4NrXpu8>cvpuEY_Jeh=a_ F;2)xJv&8@a diff --git a/blog-generator/venv/bin/activate b/blog-generator/venv/bin/activate deleted file mode 100644 index 60b8a6f..0000000 --- a/blog-generator/venv/bin/activate +++ /dev/null @@ -1,78 +0,0 @@ -# This file must be used with "source bin/activate" *from bash* -# you cannot run it directly - -deactivate () { - unset -f pydoc >/dev/null 2>&1 - - # reset old environment variables - # ! [ -z ${VAR+_} ] returns true if VAR is declared at all - if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then - PATH="$_OLD_VIRTUAL_PATH" - export PATH - unset _OLD_VIRTUAL_PATH - fi - if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then - PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" - export PYTHONHOME - unset _OLD_VIRTUAL_PYTHONHOME - fi - - # This should detect bash and zsh, which have a hash command that must - # be called to get it to forget past commands. Without forgetting - # past commands the $PATH changes we made may not be respected - if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then - hash -r 2>/dev/null - fi - - if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then - PS1="$_OLD_VIRTUAL_PS1" - export PS1 - unset _OLD_VIRTUAL_PS1 - fi - - unset VIRTUAL_ENV - if [ ! "${1-}" = "nondestructive" ] ; then - # Self destruct! - unset -f deactivate - fi -} - -# unset irrelevant variables -deactivate nondestructive - -VIRTUAL_ENV="/home/ilya/git/jeancloud-website/blog/venv" -export VIRTUAL_ENV - -_OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/bin:$PATH" -export PATH - -# unset PYTHONHOME if set -if ! [ -z "${PYTHONHOME+_}" ] ; then - _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" - unset PYTHONHOME -fi - -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then - _OLD_VIRTUAL_PS1="$PS1" - if [ "x" != x ] ; then - PS1="$PS1" - else - PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" - fi - export PS1 -fi - -# Make sure to unalias pydoc if it's already there -alias pydoc 2>/dev/null >/dev/null && unalias pydoc - -pydoc () { - python -m pydoc "$@" -} - -# This should detect bash and zsh, which have a hash command that must -# be called to get it to forget past commands. Without forgetting -# past commands the $PATH changes we made may not be respected -if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then - hash -r 2>/dev/null -fi diff --git a/blog-generator/venv/bin/activate.csh b/blog-generator/venv/bin/activate.csh deleted file mode 100644 index 8e62816..0000000 --- a/blog-generator/venv/bin/activate.csh +++ /dev/null @@ -1,42 +0,0 @@ -# This file must be used with "source bin/activate.csh" *from csh*. -# You cannot run it directly. -# Created by Davide Di Blasi . - -set newline='\ -' - -alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc' - -# Unset irrelevant variables. -deactivate nondestructive - -setenv VIRTUAL_ENV "/home/ilya/git/jeancloud-website/blog/venv" - -set _OLD_VIRTUAL_PATH="$PATH:q" -setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q" - - - -if ("" != "") then - set env_name = "" -else - set env_name = "$VIRTUAL_ENV:t:q" -endif - -# Could be in a non-interactive environment, -# in which case, $prompt is undefined and we wouldn't -# care about the prompt anyway. -if ( $?prompt ) then - set _OLD_VIRTUAL_PROMPT="$prompt:q" -if ( "$prompt:q" =~ *"$newline:q"* ) then - : -else - set prompt = "[$env_name:q] $prompt:q" -endif -endif - -unset env_name - -alias pydoc python -m pydoc - -rehash diff --git a/blog-generator/venv/bin/activate.fish b/blog-generator/venv/bin/activate.fish deleted file mode 100644 index 489f36e..0000000 --- a/blog-generator/venv/bin/activate.fish +++ /dev/null @@ -1,76 +0,0 @@ -# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. -# Do not run it directly. - -function deactivate -d 'Exit virtualenv mode and return to the normal environment.' - # reset old environment variables - if test -n "$_OLD_VIRTUAL_PATH" - set -gx PATH $_OLD_VIRTUAL_PATH - set -e _OLD_VIRTUAL_PATH - end - - if test -n "$_OLD_VIRTUAL_PYTHONHOME" - set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME - set -e _OLD_VIRTUAL_PYTHONHOME - end - - if test -n "$_OLD_FISH_PROMPT_OVERRIDE" - # Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`. - set -l fish_function_path - - # Erase virtualenv's `fish_prompt` and restore the original. - functions -e fish_prompt - functions -c _old_fish_prompt fish_prompt - functions -e _old_fish_prompt - set -e _OLD_FISH_PROMPT_OVERRIDE - end - - set -e VIRTUAL_ENV - - if test "$argv[1]" != 'nondestructive' - # Self-destruct! - functions -e pydoc - functions -e deactivate - end -end - -# Unset irrelevant variables. -deactivate nondestructive - -set -gx VIRTUAL_ENV "/home/ilya/git/jeancloud-website/blog/venv" - -set -gx _OLD_VIRTUAL_PATH $PATH -set -gx PATH "$VIRTUAL_ENV/bin" $PATH - -# Unset `$PYTHONHOME` if set. -if set -q PYTHONHOME - set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME - set -e PYTHONHOME -end - -function pydoc - python -m pydoc $argv -end - -if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" - # Copy the current `fish_prompt` function as `_old_fish_prompt`. - functions -c fish_prompt _old_fish_prompt - - function fish_prompt - # Save the current $status, for fish_prompts that display it. - set -l old_status $status - - # Prompt override provided? - # If not, just prepend the environment name. - if test -n "" - printf '%s%s' "" (set_color normal) - else - printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV") - end - - # Restore the original $status - echo "exit $old_status" | source - _old_fish_prompt - end - - set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" -end diff --git a/blog-generator/venv/bin/activate.ps1 b/blog-generator/venv/bin/activate.ps1 deleted file mode 100644 index 89dbec6..0000000 --- a/blog-generator/venv/bin/activate.ps1 +++ /dev/null @@ -1,150 +0,0 @@ -# This file must be dot sourced from PoSh; you cannot run it -# directly. Do this: . ./activate.ps1 - -# FIXME: clean up unused vars. -$script:THIS_PATH = $myinvocation.mycommand.path -$script:BASE_DIR = split-path (resolve-path "$THIS_PATH/..") -Parent -$script:DIR_NAME = split-path $BASE_DIR -Leaf - -function global:deactivate ( [switch] $NonDestructive ){ - - if ( test-path variable:_OLD_VIRTUAL_PATH ) { - $env:PATH = $variable:_OLD_VIRTUAL_PATH - remove-variable "_OLD_VIRTUAL_PATH" -scope global - } - - if ( test-path function:_old_virtual_prompt ) { - $function:prompt = $function:_old_virtual_prompt - remove-item function:\_old_virtual_prompt - } - - if ($env:VIRTUAL_ENV) { - $old_env = split-path $env:VIRTUAL_ENV -leaf - remove-item env:VIRTUAL_ENV -erroraction silentlycontinue - } - - if ( !$NonDestructive ) { - # Self destruct! - remove-item function:deactivate - } -} - -# unset irrelevant variables -deactivate -nondestructive - -$VIRTUAL_ENV = $BASE_DIR -$env:VIRTUAL_ENV = $VIRTUAL_ENV - -$global:_OLD_VIRTUAL_PATH = $env:PATH -$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH -if (! $env:VIRTUAL_ENV_DISABLE_PROMPT) { - function global:_old_virtual_prompt { "" } - $function:_old_virtual_prompt = $function:prompt - function global:prompt { - # Add a prefix to the current prompt, but don't discard it. - write-host "($(split-path $env:VIRTUAL_ENV -leaf)) " -nonewline - & $function:_old_virtual_prompt - } -} - -# SIG # Begin signature block -# MIISeAYJKoZIhvcNAQcCoIISaTCCEmUCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB -# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR -# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUS5reBwSg3zOUwhXf2jPChZzf -# yPmggg6tMIIGcDCCBFigAwIBAgIBJDANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQG -# EwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERp -# Z2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2Vy -# dGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDcxMDI0MjIwMTQ2WhcNMTcxMDI0MjIw -# MTQ2WjCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzAp -# BgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNV -# BAMTL1N0YXJ0Q29tIENsYXNzIDIgUHJpbWFyeSBJbnRlcm1lZGlhdGUgT2JqZWN0 -# IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyiOLIjUemqAbPJ1J -# 0D8MlzgWKbr4fYlbRVjvhHDtfhFN6RQxq0PjTQxRgWzwFQNKJCdU5ftKoM5N4YSj -# Id6ZNavcSa6/McVnhDAQm+8H3HWoD030NVOxbjgD/Ih3HaV3/z9159nnvyxQEckR -# ZfpJB2Kfk6aHqW3JnSvRe+XVZSufDVCe/vtxGSEwKCaNrsLc9pboUoYIC3oyzWoU -# TZ65+c0H4paR8c8eK/mC914mBo6N0dQ512/bkSdaeY9YaQpGtW/h/W/FkbQRT3sC -# pttLVlIjnkuY4r9+zvqhToPjxcfDYEf+XD8VGkAqle8Aa8hQ+M1qGdQjAye8OzbV -# uUOw7wIDAQABo4IB6TCCAeUwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -# AQYwHQYDVR0OBBYEFNBOD0CZbLhLGW87KLjg44gHNKq3MB8GA1UdIwQYMBaAFE4L -# 7xqkQFulF2mHMMo0aEPQQa7yMD0GCCsGAQUFBwEBBDEwLzAtBggrBgEFBQcwAoYh -# aHR0cDovL3d3dy5zdGFydHNzbC5jb20vc2ZzY2EuY3J0MFsGA1UdHwRUMFIwJ6Al -# oCOGIWh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNybDAnoCWgI4YhaHR0 -# cDovL2NybC5zdGFydHNzbC5jb20vc2ZzY2EuY3JsMIGABgNVHSAEeTB3MHUGCysG -# AQQBgbU3AQIBMGYwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29t -# L3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t -# L2ludGVybWVkaWF0ZS5wZGYwEQYJYIZIAYb4QgEBBAQDAgABMFAGCWCGSAGG+EIB -# DQRDFkFTdGFydENvbSBDbGFzcyAyIFByaW1hcnkgSW50ZXJtZWRpYXRlIE9iamVj -# dCBTaWduaW5nIENlcnRpZmljYXRlczANBgkqhkiG9w0BAQUFAAOCAgEAcnMLA3Va -# N4OIE9l4QT5OEtZy5PByBit3oHiqQpgVEQo7DHRsjXD5H/IyTivpMikaaeRxIv95 -# baRd4hoUcMwDj4JIjC3WA9FoNFV31SMljEZa66G8RQECdMSSufgfDYu1XQ+cUKxh -# D3EtLGGcFGjjML7EQv2Iol741rEsycXwIXcryxeiMbU2TPi7X3elbwQMc4JFlJ4B -# y9FhBzuZB1DV2sN2irGVbC3G/1+S2doPDjL1CaElwRa/T0qkq2vvPxUgryAoCppU -# FKViw5yoGYC+z1GaesWWiP1eFKAL0wI7IgSvLzU3y1Vp7vsYaxOVBqZtebFTWRHt -# XjCsFrrQBngt0d33QbQRI5mwgzEp7XJ9xu5d6RVWM4TPRUsd+DDZpBHm9mszvi9g -# VFb2ZG7qRRXCSqys4+u/NLBPbXi/m/lU00cODQTlC/euwjk9HQtRrXQ/zqsBJS6U -# J+eLGw1qOfj+HVBl/ZQpfoLk7IoWlRQvRL1s7oirEaqPZUIWY/grXq9r6jDKAp3L -# ZdKQpPOnnogtqlU4f7/kLjEJhrrc98mrOWmVMK/BuFRAfQ5oDUMnVmCzAzLMjKfG -# cVW/iMew41yfhgKbwpfzm3LBr1Zv+pEBgcgW6onRLSAn3XHM0eNtz+AkxH6rRf6B -# 2mYhLEEGLapH8R1AMAo4BbVFOZR5kXcMCwowggg1MIIHHaADAgECAgIEuDANBgkq -# hkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0 -# ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcx -# ODA2BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDIgUHJpbWFyeSBJbnRlcm1lZGlhdGUg -# T2JqZWN0IENBMB4XDTExMTIwMzE1MzQxOVoXDTEzMTIwMzE0NTgwN1owgYwxIDAe -# BgNVBA0TFzU4MTc5Ni1HaDd4Zkp4a3hRU0lPNEUwMQswCQYDVQQGEwJERTEPMA0G -# A1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xFjAUBgNVBAMTDUphbm5pcyBM -# ZWlkZWwxITAfBgkqhkiG9w0BCQEWEmphbm5pc0BsZWlkZWwuaW5mbzCCAiIwDQYJ -# KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMcPeABYdN7nPq/AkZ/EkyUBGx/l2Yui -# Lfm8ZdLG0ulMb/kQL3fRY7sUjYPyn9S6PhqqlFnNoGHJvbbReCdUC9SIQYmOEjEA -# raHfb7MZU10NjO4U2DdGucj2zuO5tYxKizizOJF0e4yRQZVxpUGdvkW/+GLjCNK5 -# L7mIv3Z1dagxDKHYZT74HXiS4VFUwHF1k36CwfM2vsetdm46bdgSwV+BCMmZICYT -# IJAS9UQHD7kP4rik3bFWjUx08NtYYFAVOd/HwBnemUmJe4j3IhZHr0k1+eDG8hDH -# KVvPgLJIoEjC4iMFk5GWsg5z2ngk0LLu3JZMtckHsnnmBPHQK8a3opUNd8hdMNJx -# gOwKjQt2JZSGUdIEFCKVDqj0FmdnDMPfwy+FNRtpBMl1sz78dUFhSrnM0D8NXrqa -# 4rG+2FoOXlmm1rb6AFtpjAKksHRpYcPk2DPGWp/1sWB+dUQkS3gOmwFzyqeTuXpT -# 0juqd3iAxOGx1VRFQ1VHLLf3AzV4wljBau26I+tu7iXxesVucSdsdQu293jwc2kN -# xK2JyHCoZH+RyytrwS0qw8t7rMOukU9gwP8mn3X6mgWlVUODMcHTULjSiCEtvyZ/ -# aafcwjUbt4ReEcnmuZtWIha86MTCX7U7e+cnpWG4sIHPnvVTaz9rm8RyBkIxtFCB -# nQ3FnoQgyxeJAgMBAAGjggOdMIIDmTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIH -# gDAuBgNVHSUBAf8EJDAiBggrBgEFBQcDAwYKKwYBBAGCNwIBFQYKKwYBBAGCNwoD -# DTAdBgNVHQ4EFgQUWyCgrIWo8Ifvvm1/YTQIeMU9nc8wHwYDVR0jBBgwFoAU0E4P -# QJlsuEsZbzsouODjiAc0qrcwggIhBgNVHSAEggIYMIICFDCCAhAGCysGAQQBgbU3 -# AQICMIIB/zAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9s -# aWN5LnBkZjA0BggrBgEFBQcCARYoaHR0cDovL3d3dy5zdGFydHNzbC5jb20vaW50 -# ZXJtZWRpYXRlLnBkZjCB9wYIKwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlm -# aWNhdGlvbiBBdXRob3JpdHkwAwIBARqBvlRoaXMgY2VydGlmaWNhdGUgd2FzIGlz -# c3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDIgVmFsaWRhdGlvbiByZXF1aXJl -# bWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVsaWFuY2Ugb25seSBm -# b3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0aGUgcmVs -# eWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wgZwGCCsGAQUFBwICMIGPMCcWIFN0YXJ0 -# Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MAMCAQIaZExpYWJpbGl0eSBhbmQg -# d2FycmFudGllcyBhcmUgbGltaXRlZCEgU2VlIHNlY3Rpb24gIkxlZ2FsIGFuZCBM -# aW1pdGF0aW9ucyIgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeS4wNgYDVR0fBC8w -# LTAroCmgJ4YlaHR0cDovL2NybC5zdGFydHNzbC5jb20vY3J0YzItY3JsLmNybDCB -# iQYIKwYBBQUHAQEEfTB7MDcGCCsGAQUFBzABhitodHRwOi8vb2NzcC5zdGFydHNz -# bC5jb20vc3ViL2NsYXNzMi9jb2RlL2NhMEAGCCsGAQUFBzAChjRodHRwOi8vYWlh -# LnN0YXJ0c3NsLmNvbS9jZXJ0cy9zdWIuY2xhc3MyLmNvZGUuY2EuY3J0MCMGA1Ud -# EgQcMBqGGGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tLzANBgkqhkiG9w0BAQUFAAOC -# AQEAhrzEV6zwoEtKjnFRhCsjwiPykVpo5Eiye77Ve801rQDiRKgSCCiW6g3HqedL -# OtaSs65Sj2pm3Viea4KR0TECLcbCTgsdaHqw2x1yXwWBQWZEaV6EB05lIwfr94P1 -# SFpV43zkuc+bbmA3+CRK45LOcCNH5Tqq7VGTCAK5iM7tvHwFlbQRl+I6VEL2mjpF -# NsuRjDOVrv/9qw/a22YJ9R7Y1D0vUSs3IqZx2KMUaYDP7H2mSRxJO2nADQZBtriF -# gTyfD3lYV12MlIi5CQwe3QC6DrrfSMP33i5Wa/OFJiQ27WPxmScYVhiqozpImFT4 -# PU9goiBv9RKXdgTmZE1PN0NQ5jGCAzUwggMxAgEBMIGTMIGMMQswCQYDVQQGEwJJ -# TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0 -# YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3Mg -# MiBQcmltYXJ5IEludGVybWVkaWF0ZSBPYmplY3QgQ0ECAgS4MAkGBSsOAwIaBQCg -# eDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEE -# AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJ -# BDEWBBRVGw0FDSiaIi38dWteRUAg/9Pr6DANBgkqhkiG9w0BAQEFAASCAgCInvOZ -# FdaNFzbf6trmFDZKMojyx3UjKMCqNjHVBbuKY0qXwFC/ElYDV1ShJ2CBZbdurydO -# OQ6cIQ0KREOCwmX/xB49IlLHHUxNhEkVv7HGU3EKAFf9IBt9Yr7jikiR9cjIsfHK -# 4cjkoKJL7g28yEpLLkHt1eo37f1Ga9lDWEa5Zq3U5yX+IwXhrUBm1h8Xr033FhTR -# VEpuSz6LHtbrL/zgJnCzJ2ahjtJoYevdcWiNXffosJHFaSfYDDbiNsPRDH/1avmb -# 5j/7BhP8BcBaR6Fp8tFbNGIcWHHGcjqLMnTc4w13b7b4pDhypqElBa4+lCmwdvv9 -# GydYtRgPz8GHeoBoKj30YBlMzRIfFYaIFGIC4Ai3UEXkuH9TxYohVbGm/W0Kl4Lb -# RJ1FwiVcLcTOJdgNId2vQvKc+jtNrjcg5SP9h2v/C4aTx8tyc6tE3TOPh2f9b8DL -# S+SbVArJpuJqrPTxDDoO1QNjTgLcdVYeZDE+r/NjaGZ6cMSd8db3EaG3ijD/0bud -# SItbm/OlNVbQOFRR76D+ZNgPcU5iNZ3bmvQQIg6aSB9MHUpIE/SeCkNl9YeVk1/1 -# GFULgNMRmIYP4KLvu9ylh5Gu3hvD5VNhH6+FlXANwFy07uXks5uF8mfZVxVCnodG -# xkNCx+6PsrA5Z7WP4pXcmYnMn97npP/Q9EHJWw== -# SIG # End signature block diff --git a/blog-generator/venv/bin/activate_this.py b/blog-generator/venv/bin/activate_this.py deleted file mode 100644 index 444d3fd..0000000 --- a/blog-generator/venv/bin/activate_this.py +++ /dev/null @@ -1,36 +0,0 @@ -"""By using execfile(this_file, dict(__file__=this_file)) you will -activate this virtualenv environment. - -This can be used when you must use an existing Python interpreter, not -the virtualenv bin/python -""" - -try: - __file__ -except NameError: - raise AssertionError( - "You must run this like execfile('path/to/activate_this.py', dict(__file__='path/to/activate_this.py'))" - ) -import os -import site -import sys - -old_os_path = os.environ.get("PATH", "") -os.environ["PATH"] = os.path.dirname(os.path.abspath(__file__)) + os.pathsep + old_os_path -base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -if sys.platform == "win32": - site_packages = os.path.join(base, "Lib", "site-packages") -else: - site_packages = os.path.join(base, "lib", "python%s" % sys.version[:3], "site-packages") -prev_sys_path = list(sys.path) - -site.addsitedir(site_packages) -sys.real_prefix = sys.prefix -sys.prefix = base -# Move the added items to the front of the path: -new_sys_path = [] -for item in list(sys.path): - if item not in prev_sys_path: - new_sys_path.append(item) - sys.path.remove(item) -sys.path[:0] = new_sys_path diff --git a/blog-generator/venv/bin/easy_install b/blog-generator/venv/bin/easy_install deleted file mode 100755 index 85e938c..0000000 --- a/blog-generator/venv/bin/easy_install +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from setuptools.command.easy_install import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/easy_install-3.8 b/blog-generator/venv/bin/easy_install-3.8 deleted file mode 100755 index 85e938c..0000000 --- a/blog-generator/venv/bin/easy_install-3.8 +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from setuptools.command.easy_install import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/markdown_py b/blog-generator/venv/bin/markdown_py deleted file mode 100755 index 3e2ec9e..0000000 --- a/blog-generator/venv/bin/markdown_py +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from markdown.__main__ import run -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(run()) diff --git a/blog-generator/venv/bin/pelican b/blog-generator/venv/bin/pelican deleted file mode 100755 index d16b46e..0000000 --- a/blog-generator/venv/bin/pelican +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pelican.__main__ import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/pelican-import b/blog-generator/venv/bin/pelican-import deleted file mode 100755 index fb2b4ba..0000000 --- a/blog-generator/venv/bin/pelican-import +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pelican.tools.pelican_import import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/pelican-quickstart b/blog-generator/venv/bin/pelican-quickstart deleted file mode 100755 index e514227..0000000 --- a/blog-generator/venv/bin/pelican-quickstart +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pelican.tools.pelican_quickstart import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/pelican-themes b/blog-generator/venv/bin/pelican-themes deleted file mode 100755 index debd452..0000000 --- a/blog-generator/venv/bin/pelican-themes +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pelican.tools.pelican_themes import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/pip b/blog-generator/venv/bin/pip deleted file mode 100755 index 74d6c3d..0000000 --- a/blog-generator/venv/bin/pip +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from pip._internal.cli.main import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/pip3 b/blog-generator/venv/bin/pip3 deleted file mode 100755 index 74d6c3d..0000000 --- a/blog-generator/venv/bin/pip3 +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from pip._internal.cli.main import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/pip3.8 b/blog-generator/venv/bin/pip3.8 deleted file mode 100755 index 74d6c3d..0000000 --- a/blog-generator/venv/bin/pip3.8 +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from pip._internal.cli.main import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/pygmentize b/blog-generator/venv/bin/pygmentize deleted file mode 100755 index 8a712e8..0000000 --- a/blog-generator/venv/bin/pygmentize +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from pygments.cmdline import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/python b/blog-generator/venv/bin/python deleted file mode 100755 index 9340035911e64888fc701de9375b70b3fc97b241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14088 zcmeHOeQX@n5r1dL@rA@^6Kv{|2rmebBgGr%Qx1{g&UTWua3G-$RDxu6_O0zB_Fa0n zuIvbjs3xcAN|`w?$vcIS6q zFOI|?`KRg|Yw!2wH#6_OoqccZ_0B!8vu9UDET$lp>K4UXYhA!3#Sq^p4T7XeBWDR7fVll>ruO#HS6Jn3zTJZy7hKw9{DM?lb7NC;z;J7L_i5|t@ z$^byv%i|dwOk((-Wjre?FdWCZnP~|eX4)5Hvz&LUAmUi%xH*ZNlQ`fhnI{nW{C#q|NLfQZ{iaXioOD@gmDGTx=~(kSx>%IT^N!`Z%V zTQ&@5T86W^(Xp1XwrwrjwwT4dxye88dYTBYsol5lS4Vg3s%~k#_QH$HKh913@}~LP zeTOgdym=1XAN#PdKhl2{wR!2VozLs%`>v}poClj_IVt3M1=(1xpkt-qQfd`pjkLp% z5T%xo$KKp`?(>&#JAbNk=i8qhTG9E=dq4T{+TWjl{Qh%qo`0sM{-bAVZhms*p$DG6 zKio&OeT<0JQIhmK=rESxP2!gFPZDp?5tTzk7*Ue+COWQPg8wyft0@z>Uu+Pc-w|HP zSup|v>*je<>r}m}O9nhXUl3kJ`1gIj;XD3s3*Q*={}b{4e6FMhi4%Z&oRInFgs&3* zB|?Md6CHPl_#3it%WIw1;o)(2D4*MGw(;`YXtpZi`nkPL*>?X}+8)T}(!<#!4ykOi zi*CB$+9T;~j+nubd`=i!+1a0gTBuG8$a(Z zy>-wkePm7ib#`xW&t%nI^rx6LS@R*eSd;Cqdn64%qqx66M(PXP?_|~U4BO}21{&%h zw`r&q-gIr#QSNw3ko?De|E&dvb@Ntf);j>=8$eN-Or7_13&wPaSNP4&vVQKy6dk zLOjp!XgizL=;r;_MEh!PTBQqajrDN*)ueb0iauxhX^yW|t)gb^z|_L|O${uxYnzga z`}<^&d}V&Dr|#~VY=4QKh*NiUm)=S3?=F3t>P?mYv)`I*IZpJCde&X!oX$Ku?|Ihg zics#xmjQ({h zUl}5`=nUu#=nUu#=nUu#=nUu#=nUu#=nUu#=nQ<%48-UiO>9l&j%M=b_aJL$J?~z^ z^@Q|Tt=50#c`o5`!aor5dsdd%kvmmvtS+`@RdxI^dirOc-_=il>3RIbt-7lHH#y92 zq2na+;rAxocMl!Ep>h0obh{FDzo_U=G(K9nGhs|F+nH#7q^c{?`p|MK(Kb=NJCV#K z+ER(uRHC^fVRR%KI}&vriMap1=?UuREcFw9Uqh4@odKNzodKNzodKNzodKNzodKNz zoq_+$44~c)^>wJ7P%^+oFOP~Un&>h^vpX4Lhq5gqk<*NBe#K7KZ2f&JTg zFYoJ8l!s@xR%zf_@hP!$y)Dbv0hDWR8%4)?i0aq!a(hTR!nml@MjbEWfr$UN7tD|H z;fKt>6r&Ie-VEs#Mc;#^}>8YBdXazpB-AhU|etdc?7ZG86$V zh_KUzLV7%iK%2Ttk7WC4tUUD<^g(s5%IwdNj5s;>a^;U}!Fes9_ViNUXTW$^H_%ak zj`(Q({ta*x4S=MLh01K-_mQe)Rl#A@VtK|Gvn57X{V0zrq~7en-d`QG>s)f%`Rnui<+tQGe*bS17hN6p!C~vn@oDz%S4ibnt&917CZLkNZ2m z2XsoVAJzxra2@|lvFw8QlTxpKas!bhRsiKs!~@?TOE_L7#g%>ouwa}(TbMuezfgnw z!uWN`z)~mi7$;zZvCw9Gmku6Z+?nzP@$zQ}Xy2C=Nz3B7m%Ws_PCA?paoj{4=>G!C CASI^& diff --git a/blog-generator/venv/bin/python-config b/blog-generator/venv/bin/python-config deleted file mode 100755 index dc4bba8..0000000 --- a/blog-generator/venv/bin/python-config +++ /dev/null @@ -1,78 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -import sys -import getopt -import sysconfig - -valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', - 'ldflags', 'help'] - -if sys.version_info >= (3, 2): - valid_opts.insert(-1, 'extension-suffix') - valid_opts.append('abiflags') -if sys.version_info >= (3, 3): - valid_opts.append('configdir') - - -def exit_with_usage(code=1): - sys.stderr.write("Usage: {0} [{1}]\n".format( - sys.argv[0], '|'.join('--'+opt for opt in valid_opts))) - sys.exit(code) - -try: - opts, args = getopt.getopt(sys.argv[1:], '', valid_opts) -except getopt.error: - exit_with_usage() - -if not opts: - exit_with_usage() - -pyver = sysconfig.get_config_var('VERSION') -getvar = sysconfig.get_config_var - -opt_flags = [flag for (flag, val) in opts] - -if '--help' in opt_flags: - exit_with_usage(code=0) - -for opt in opt_flags: - if opt == '--prefix': - print(sysconfig.get_config_var('prefix')) - - elif opt == '--exec-prefix': - print(sysconfig.get_config_var('exec_prefix')) - - elif opt in ('--includes', '--cflags'): - flags = ['-I' + sysconfig.get_path('include'), - '-I' + sysconfig.get_path('platinclude')] - if opt == '--cflags': - flags.extend(getvar('CFLAGS').split()) - print(' '.join(flags)) - - elif opt in ('--libs', '--ldflags'): - abiflags = getattr(sys, 'abiflags', '') - libs = ['-lpython' + pyver + abiflags] - libs += getvar('LIBS').split() - libs += getvar('SYSLIBS').split() - # add the prefix/lib/pythonX.Y/config dir, but only if there is no - # shared library in prefix/lib/. - if opt == '--ldflags': - if not getvar('Py_ENABLE_SHARED'): - libs.insert(0, '-L' + getvar('LIBPL')) - if not getvar('PYTHONFRAMEWORK'): - libs.extend(getvar('LINKFORSHARED').split()) - print(' '.join(libs)) - - elif opt == '--extension-suffix': - ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') - if ext_suffix is None: - ext_suffix = sysconfig.get_config_var('SO') - print(ext_suffix) - - elif opt == '--abiflags': - if not getattr(sys, 'abiflags', None): - exit_with_usage() - print(sys.abiflags) - - elif opt == '--configdir': - print(sysconfig.get_config_var('LIBPL')) diff --git a/blog-generator/venv/bin/python3 b/blog-generator/venv/bin/python3 deleted file mode 120000 index d8654aa..0000000 --- a/blog-generator/venv/bin/python3 +++ /dev/null @@ -1 +0,0 @@ -python \ No newline at end of file diff --git a/blog-generator/venv/bin/python3.8 b/blog-generator/venv/bin/python3.8 deleted file mode 120000 index d8654aa..0000000 --- a/blog-generator/venv/bin/python3.8 +++ /dev/null @@ -1 +0,0 @@ -python \ No newline at end of file diff --git a/blog-generator/venv/bin/rst2html.py b/blog-generator/venv/bin/rst2html.py deleted file mode 100755 index 9069476..0000000 --- a/blog-generator/venv/bin/rst2html.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2html.py 4564 2006-05-21 20:44:42Z wiemann $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -A minimal front end to the Docutils Publisher, producing HTML. -""" - -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline, default_description - - -description = ('Generates (X)HTML documents from standalone reStructuredText ' - 'sources. ' + default_description) - -publish_cmdline(writer_name='html', description=description) diff --git a/blog-generator/venv/bin/rst2html4.py b/blog-generator/venv/bin/rst2html4.py deleted file mode 100755 index 0f4487f..0000000 --- a/blog-generator/venv/bin/rst2html4.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2html4.py 7994 2016-12-10 17:41:45Z milde $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -A minimal front end to the Docutils Publisher, producing (X)HTML. - -The output conforms to XHTML 1.0 transitional -and almost to HTML 4.01 transitional (except for closing empty tags). -""" - -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline, default_description - - -description = ('Generates (X)HTML documents from standalone reStructuredText ' - 'sources. ' + default_description) - -publish_cmdline(writer_name='html4', description=description) diff --git a/blog-generator/venv/bin/rst2html5.py b/blog-generator/venv/bin/rst2html5.py deleted file mode 100755 index d49aa25..0000000 --- a/blog-generator/venv/bin/rst2html5.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python -# -*- coding: utf8 -*- -# :Copyright: © 2015 Günter Milde. -# :License: Released under the terms of the `2-Clause BSD license`_, in short: -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause -# -# Revision: $Revision: 8410 $ -# Date: $Date: 2019-11-04 22:14:43 +0100 (Mo, 04. Nov 2019) $ - -""" -A minimal front end to the Docutils Publisher, producing HTML 5 documents. - -The output also conforms to XHTML 1.0 transitional -(except for the doctype declaration). -""" - -try: - import locale # module missing in Jython - locale.setlocale(locale.LC_ALL, '') -except locale.Error: - pass - -from docutils.core import publish_cmdline, default_description - -description = (u'Generates HTML 5 documents from standalone ' - u'reStructuredText sources ' - + default_description) - -publish_cmdline(writer_name='html5', description=description) diff --git a/blog-generator/venv/bin/rst2latex.py b/blog-generator/venv/bin/rst2latex.py deleted file mode 100755 index f33284f..0000000 --- a/blog-generator/venv/bin/rst2latex.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2latex.py 5905 2009-04-16 12:04:49Z milde $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -A minimal front end to the Docutils Publisher, producing LaTeX. -""" - -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline - -description = ('Generates LaTeX documents from standalone reStructuredText ' - 'sources. ' - 'Reads from (default is stdin) and writes to ' - ' (default is stdout). See ' - ' for ' - 'the full reference.') - -publish_cmdline(writer_name='latex', description=description) diff --git a/blog-generator/venv/bin/rst2man.py b/blog-generator/venv/bin/rst2man.py deleted file mode 100755 index cb1f4d0..0000000 --- a/blog-generator/venv/bin/rst2man.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# Author: -# Contact: grubert@users.sf.net -# Copyright: This module has been placed in the public domain. - -""" -man.py -====== - -This module provides a simple command line interface that uses the -man page writer to output from ReStructuredText source. -""" - -import locale -try: - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline, default_description -from docutils.writers import manpage - -description = ("Generates plain unix manual documents. " + default_description) - -publish_cmdline(writer=manpage.Writer(), description=description) diff --git a/blog-generator/venv/bin/rst2odt.py b/blog-generator/venv/bin/rst2odt.py deleted file mode 100755 index ad7a64e..0000000 --- a/blog-generator/venv/bin/rst2odt.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2odt.py 5839 2009-01-07 19:09:28Z dkuhlman $ -# Author: Dave Kuhlman -# Copyright: This module has been placed in the public domain. - -""" -A front end to the Docutils Publisher, producing OpenOffice documents. -""" - -import sys -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline_to_binary, default_description -from docutils.writers.odf_odt import Writer, Reader - - -description = ('Generates OpenDocument/OpenOffice/ODF documents from ' - 'standalone reStructuredText sources. ' + default_description) - - -writer = Writer() -reader = Reader() -output = publish_cmdline_to_binary(reader=reader, writer=writer, - description=description) - diff --git a/blog-generator/venv/bin/rst2odt_prepstyles.py b/blog-generator/venv/bin/rst2odt_prepstyles.py deleted file mode 100755 index 2e9fb87..0000000 --- a/blog-generator/venv/bin/rst2odt_prepstyles.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2odt_prepstyles.py 8346 2019-08-26 12:11:32Z milde $ -# Author: Dave Kuhlman -# Copyright: This module has been placed in the public domain. - -""" -Fix a word-processor-generated styles.odt for odtwriter use: Drop page size -specifications from styles.xml in STYLE_FILE.odt. -""" - -# Author: Michael Schutte - -from __future__ import print_function - -from lxml import etree -import sys -import zipfile -from tempfile import mkstemp -import shutil -import os - -NAMESPACES = { - "style": "urn:oasis:names:tc:opendocument:xmlns:style:1.0", - "fo": "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" -} - - -def prepstyle(filename): - - zin = zipfile.ZipFile(filename) - styles = zin.read("styles.xml") - - root = etree.fromstring(styles) - for el in root.xpath("//style:page-layout-properties", - namespaces=NAMESPACES): - for attr in el.attrib: - if attr.startswith("{%s}" % NAMESPACES["fo"]): - del el.attrib[attr] - - tempname = mkstemp() - zout = zipfile.ZipFile(os.fdopen(tempname[0], "w"), "w", - zipfile.ZIP_DEFLATED) - - for item in zin.infolist(): - if item.filename == "styles.xml": - zout.writestr(item, etree.tostring(root)) - else: - zout.writestr(item, zin.read(item.filename)) - - zout.close() - zin.close() - shutil.move(tempname[1], filename) - - -def main(): - args = sys.argv[1:] - if len(args) != 1: - print(__doc__, file=sys.stderr) - print("Usage: %s STYLE_FILE.odt\n" % sys.argv[0], file=sys.stderr) - sys.exit(1) - filename = args[0] - prepstyle(filename) - - -if __name__ == '__main__': - main() diff --git a/blog-generator/venv/bin/rst2pseudoxml.py b/blog-generator/venv/bin/rst2pseudoxml.py deleted file mode 100755 index 81314eb..0000000 --- a/blog-generator/venv/bin/rst2pseudoxml.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2pseudoxml.py 4564 2006-05-21 20:44:42Z wiemann $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -A minimal front end to the Docutils Publisher, producing pseudo-XML. -""" - -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline, default_description - - -description = ('Generates pseudo-XML from standalone reStructuredText ' - 'sources (for testing purposes). ' + default_description) - -publish_cmdline(description=description) diff --git a/blog-generator/venv/bin/rst2s5.py b/blog-generator/venv/bin/rst2s5.py deleted file mode 100755 index a1003c8..0000000 --- a/blog-generator/venv/bin/rst2s5.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2s5.py 4564 2006-05-21 20:44:42Z wiemann $ -# Author: Chris Liechti -# Copyright: This module has been placed in the public domain. - -""" -A minimal front end to the Docutils Publisher, producing HTML slides using -the S5 template system. -""" - -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline, default_description - - -description = ('Generates S5 (X)HTML slideshow documents from standalone ' - 'reStructuredText sources. ' + default_description) - -publish_cmdline(writer_name='s5', description=description) diff --git a/blog-generator/venv/bin/rst2xetex.py b/blog-generator/venv/bin/rst2xetex.py deleted file mode 100755 index f9799a1..0000000 --- a/blog-generator/venv/bin/rst2xetex.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2xetex.py 7847 2015-03-17 17:30:47Z milde $ -# Author: Guenter Milde -# Copyright: This module has been placed in the public domain. - -""" -A minimal front end to the Docutils Publisher, producing Lua/XeLaTeX code. -""" - -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline - -description = ('Generates LaTeX documents from standalone reStructuredText ' - 'sources for compilation with the Unicode-aware TeX variants ' - 'XeLaTeX or LuaLaTeX. ' - 'Reads from (default is stdin) and writes to ' - ' (default is stdout). See ' - ' for ' - 'the full reference.') - -publish_cmdline(writer_name='xetex', description=description) diff --git a/blog-generator/venv/bin/rst2xml.py b/blog-generator/venv/bin/rst2xml.py deleted file mode 100755 index 86b8c64..0000000 --- a/blog-generator/venv/bin/rst2xml.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rst2xml.py 4564 2006-05-21 20:44:42Z wiemann $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -A minimal front end to the Docutils Publisher, producing Docutils XML. -""" - -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline, default_description - - -description = ('Generates Docutils-native XML from standalone ' - 'reStructuredText sources. ' + default_description) - -publish_cmdline(writer_name='xml', description=description) diff --git a/blog-generator/venv/bin/rstpep2html.py b/blog-generator/venv/bin/rstpep2html.py deleted file mode 100755 index ccc78dd..0000000 --- a/blog-generator/venv/bin/rstpep2html.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# $Id: rstpep2html.py 4564 2006-05-21 20:44:42Z wiemann $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -A minimal front end to the Docutils Publisher, producing HTML from PEP -(Python Enhancement Proposal) documents. -""" - -try: - import locale - locale.setlocale(locale.LC_ALL, '') -except: - pass - -from docutils.core import publish_cmdline, default_description - - -description = ('Generates (X)HTML from reStructuredText-format PEP files. ' - + default_description) - -publish_cmdline(reader_name='pep', writer_name='pep_html', - description=description) diff --git a/blog-generator/venv/bin/unidecode b/blog-generator/venv/bin/unidecode deleted file mode 100755 index 26ffe1d..0000000 --- a/blog-generator/venv/bin/unidecode +++ /dev/null @@ -1,8 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python -# -*- coding: utf-8 -*- -import re -import sys -from unidecode.util import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/bin/wheel b/blog-generator/venv/bin/wheel deleted file mode 100755 index 846c2b8..0000000 --- a/blog-generator/venv/bin/wheel +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ilya/git/jeancloud-website/blog/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from wheel.cli import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/blog-generator/venv/include/python3.8 b/blog-generator/venv/include/python3.8 deleted file mode 120000 index 137e766..0000000 --- a/blog-generator/venv/include/python3.8 +++ /dev/null @@ -1 +0,0 @@ -/usr/include/python3.8 \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/__future__.py b/blog-generator/venv/lib/python3.8/__future__.py deleted file mode 120000 index 8fcbda8..0000000 --- a/blog-generator/venv/lib/python3.8/__future__.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/__future__.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/__pycache__/__future__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/__future__.cpython-38.pyc deleted file mode 100644 index 1f78f36ab424325d082d3e64af8ec43774f668fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4169 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 E4}LCa0RR91 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/_weakrefset.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/_weakrefset.cpython-38.pyc deleted file mode 100644 index 8223290b5142bf34c3c110eb65ac49afbf89b93d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7638 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 Jn=2IT{|%iv`>_B3 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/bisect.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/bisect.cpython-38.pyc deleted file mode 100644 index c11e727d6c0721631852ecb74455ed3c0a8c0dc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2392 zcmd5-UvC>l5Z~Q9U!1d@R?rf`1KI~9V$|A2yr8O7s1-;-C?FdCxdLnLUHi6K-#rz4l_?)k()AvnSb1rR5na) zpL|Z@Yd%rIL1;gu1m7=7%)TIs^)?jk)g^mC+E-$74L|4n-7v4LIvwC zkksg*LJtCc4irz7u)|2nj@#aAv$8pG>Fm2;%AgAJ)Gw(h>AYknDOsdXiQR+*KDpP8 zl8NeSb0oTBopm265f4q0%bSO4kV4wJ1CxxqGZoLeMi08vqby3|w>ockD=(etQP~6+ zkip8KhuApKHn*s4!0Hl&2p=A~kH_{w6im_sVy|XIvJ?6pEj;NR)Gg0wK~CtxLvUgL zWBhIt>Ayl2K0rAfp^b^5`Gbu zZ^HP)5)NrVEuLu8lD^SquC2gD_l)mmxzX>-WZ3V!+s75ZMKU@YuvziCZ0t^^z}%|k u1eLOfw~IWd9+h>;wSAPE}&Be4I7FL4~e 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 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/copy.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/copy.cpython-38.pyc deleted file mode 100644 index 1725b11434785dc585d82e0ca61e2ff2299859db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7001 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 I|Jk_uZb%7 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/copyreg.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/copyreg.cpython-38.pyc deleted file mode 100644 index 7cc8fa5eecb7962cef3fd53cfcd77a550688a77a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4356 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 OHD?}%_iVzw>;D49DdLR) diff --git a/blog-generator/venv/lib/python3.8/__pycache__/fnmatch.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/fnmatch.cpython-38.pyc deleted file mode 100644 index 904cac2b60e61ea0fcf130ffb6ebc1df4b72c696..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3370 zcma)8L2nz!72erhE|-)ntFj}^t+prJy(;&4jn{u~^Ep2M(mG^qpI_h(s5QR8EBMy=MegA{$L*(9 zV=??Av#ihJM5JL~1pQD)-8kJ1p2xZysIEwoU=V68WU5;AdM7muE1y07<)gI+zj|~# zc=BL<{n6)ZjdG_@K^R4u_*sEuwgP3*>QSP}+O><*Jq*2Rl~ z6iSgLK>%SR=!n2hwnkZh09WuSbMT5;1)WR=Y9IuE&4`&|u`=_96nY4ky;6HdQXLM0 z1%oV|x@ocv_N+YC0nc#mG}BXSf>^g2^%LO2S}VLxoZvQ!>f|blxygVWRn(?F5Rpy% zlOK&8v`^90d+4;a$ByjWI%WscF~gW?C%1BTNWfs>UjU4Cp>*)PE8rX%OmBU5*HgRe z^#H#o6PyI06u}p1{9=M1rALYQxa7G-jQANC;h5r?kRwfqGa~Mn)EPNUM}Yz{!PRs_ z8Adp|Vcbw+f9s4KVw`ahUO+Dyua%rrg;Pf3;0d2$e2`*WtYcsmkcu--Qf4QP%NxP< zN8o6g9Y4lu2E$mDcE&`!j_+$l{BPrE1?82ph zFB}m6WXUg(W4D|t;T1IEtE>PpMI(+7{1@w!UpK}}`h4vW7UB&=tG04b) zl|vNGUX4&N{=@&3z-}Yfqhx5(F@*>cJSC!aL|cIWFhG`~fxh`I@Qg3oTKevu-zL@)Y z<=8p!b01(JKdeChT3$UeB`)_#2Sp9&rB{6ZBUs^sYktOMEFmtwc;xaWe(9x^S0BR9 zD3+eC9C`dQe=GN($D5ps-|%pmfmxs|n>vPCg4a?O z><=@%occnC%~|c7;8ap-F02#tVYkM1>((i|U$E9G+c;&{PTAJj-rN}5&E_fFJheAB zPbeBsS@Xof_Z(J$-ZSEY~U!qLx+uX%DEAo9X%InnK zLf`IGvDt3;g@YHfY=B(2 zojB$4su}KOaVn|&p}Gur3Qwpg9Ee7(OoJ>gSSl&S6)Y;)Ub~|7u+wRKQFoa3RKa?$ z=S6bdFVNJN=qzu6xu%*>UZko*wZ&zZF)CYGX()FtAcwwdFBtj~=JRaHslyY#vp`g~ zghpJ8tTA6yx3_r~ZEu&!{cUI}&rmb(>?}(Zv4lwi7P{Y}mdN3@c{ZB@VA8jFSD1Qw n<`5>UnG)&W?Pq+LhRtX}gM{rZ0aGA?1L diff --git a/blog-generator/venv/lib/python3.8/__pycache__/functools.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/functools.cpython-38.pyc deleted file mode 100644 index e2524fa65be02d5578dde170325b3c158e4186ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27935 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 P|Dt#$ZpMr8QhedRyaC&% diff --git a/blog-generator/venv/lib/python3.8/__pycache__/hashlib.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/hashlib.cpython-38.pyc deleted file mode 100644 index 36f946af4572aa446e1f33a713034f2a7bc50e99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6765 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 E1}nGeg8%>k diff --git a/blog-generator/venv/lib/python3.8/__pycache__/heapq.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/heapq.cpython-38.pyc deleted file mode 100644 index 5bb7a874fd3b02a7e99fa3dc49881427ed3ce8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14108 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 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/hmac.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/hmac.cpython-38.pyc deleted file mode 100644 index 380e98b62b0f18532820779d9e9c44d1bf4b5586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6426 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 Ow5R!LcpBBHJpVtorAvPR diff --git a/blog-generator/venv/lib/python3.8/__pycache__/imp.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/imp.cpython-38.pyc deleted file mode 100644 index c6c28a1913715cf5977a211250bee11c606775b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9847 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 NuJ}4y%Q>|?^4}fYmM8!K diff --git a/blog-generator/venv/lib/python3.8/__pycache__/io.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/io.cpython-38.pyc deleted file mode 100644 index 6729118798ab1b8faf2dd7c7dbdd49a6f691faa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3492 zcmbtXOK%&=5uV{&qxZvFzukT;Yyn#8kV}vVh9q0s2%D9>k`-lVk<2#PO|qqVaJz@% z(%0k~V1Gh#%+JUze;}8+=41r<13`e~tDYe#0qYzb5iCwucUON^^;J#lY<}Kz@b}k$ zKL73C<{jtnG`Rk^iop)P=E8Lx;rNbleOHu3SyV(-)I?o0#EkI7te6w?VnHm5C9y14 z#Hv{9uKFc$ORR@wzifXieg(gugypE}SEHI=i|T$oYWR(4#-E8i--~Ab*=Ww6i{}0L zXu)5I7X8I&$zO_={pD!IUvV8-zG(QX;w5McIte-j?kNID!j`OxBnMzoch(Rb>Unf^eNW)U7 z-;B~;5;GO2Qg?Wpv46-xmd zu!wPfOw;prQ+q_3^jXrekB3{wtf!>ry4@SmUV^||IFGke*5XF8cF2ukhsS#uG}&S5 z<>vFHSfSceu!NNtXq)UPN#!Q%B|~{7^(IVnd%lM6hQ*0zWS?tpQMY6|lyC!X3OLB% zC>v@8_qtR6&Ci*N`k{l$cp3>xv( ze8^g(G|%8PDhDc*hsS`@vXRB~^c1*Ikiml!6AqAT$EU1=od!tv2Az)7QWVf~P!>(g z&QQ?61U^A9=Ff}CNgI?&<4r+qva!{3gq_kg9-km3G^UhHbmwol(kwsD%h^eUK!TAG zn?>FVk$ehA{zThb2_mMY=}U0+N`|B6#FrDyC(+n@B(^YaX-o?*L=w^13uZ|lM| z*&f9iQAN%WY0Hwa)5wI1KZ|6P=uw^zssym1Cv`#VNisIsTlsyO$91#F_9V?RZYL9R z3YiZ)m>>I(d?hS}0o128bFO(G3_}<2( zlqA(rZChx0_LCT_w+*7$ZpeFTKQA_{4e}rsc`3Fe8yGxt!!G4$m}oqXw;=(7r~GH0 z_j>^w8h;JjU3rWj|{tsB{(EE`Y{_&cg>G`jVwN^8Btiq?O~! z8{Km=;SQOi7FSeSa|{;9^8Q67MeD;$YwQKkCM`M=$YC@wO@mgmfj&Z}`iU_Lyl#5$ z{_*)hp{ZOU&?nFiBDUQn%}(F;?`ERAFE`nj>Qb^_NiC9Cvh4_?CR!nlcDfN)VY8h? zw2bRZb}}$Vh9Q<=)YSQC=benPs5!XAvR&{C$k-c|>SVySO%kfUQD&!a70p;A_?(q=TE9e=Bm-aITOj%<5Hr~SArOnfO#- zV#CdrgL8$~>(IPPVl)?AQ#L-e`+ZP}4{$Nnpc3eU7fuk^(EDZHYU^7t^O2RI*J&@+ zfIo`@jf;0?p5bMhTOmRJujq%gs=mAT>Ps-mGE6@qJ!MuuB|(wZ&q$DWSwqXNGU#o7 z^^&f!`cu-*9!7Kvw5{yNn36TN^SXISb!Xl}RGwApo?CM4C;z=JozlN6^@iIh?Nn>! jTDjulQ@veYvmdY2a7+Jblom>J?t)t?mE0wKYNh`Ihx6Z; diff --git a/blog-generator/venv/lib/python3.8/__pycache__/keyword.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/keyword.cpython-38.pyc deleted file mode 100644 index 10215782b7d24409e42ffcb0e583af0aaa48f760..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmb_b&2H2%5YA?^+ihse|No!cLYGSI=D-C3LLekKP*q5jiw{KJ%w*SH$Bt~LOStk7 zJOfAGf@g@ti8C+2iAh-`#Hj}+@{C6_-~4zcZ&z32favRw;kz&0Ao$)Yf72!@Pw6-y z1_2MC1K}j(9q2*?J?O&{3}6{zI0Y-P3Ttp0&cInX2j}4eT!c$-8Lq%pxCYnZ2Hb>O za2pt`!v<`^9k@H$kOcB#eu~W1 z#n>pvq$YI{c!v!$7&32;J-jIyNQ;>_wq_=eTUc59snN`t%4QVEA~Kjb^|5qbvKTwH9;&`hz+!Gt}+`fYxPCj*~^^QCY|FGv(20dbT4} z^$x2|#WJDW>e;XmGh`O2!rcXAIEtHP=@wekpUstYzUjRX%3%}j8%_McR>-^b20Rpw z_l2XDJ?{xu>x{%)NYcg@#fmZ)HVyWcFODVQux+Y8l@rZ%Mip;@LPKG5@{Z&uQ@?L$cI z$VwX=d=BgiiDUNjc``KxCQ{WRnMj`;qR^Q#73|J&?4-wJtjr`iLVc7dn$luzMi2g) cS2K8A7^oCJX~VlcV$s^58+QJ~_buA`1qXX5V*mgE diff --git a/blog-generator/venv/lib/python3.8/__pycache__/linecache.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/linecache.cpython-38.pyc deleted file mode 100644 index 52c44cdd14fb1fb5a6723cafee9f426d62e85ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3877 zcmZWs&5zs06`$dUL~*t9`lF6Fa2zH;W2>;W{XpBmSQ`!Eq|Kq*)?UNTB8kA&j3llo zQac=FD}g!`>w{4gsEhW{{rwVS|Dnp+%SPoVxU&R>U^`53Va0rho2Rv7nWw#Do2Rqm z2wOP99oRdrI45ete!_QZ5ew_0E}SQ9#}jM96Aip=i1Wf1E+k)E5G$eyX+^Ax7J4;> z^?0qm4lx%HGJx zJ+k!jav)Isecah?6q@BMw+^iZ?3{B4jU%q!);zZlIi&9=4rfU-w{!UA3R`Cn7+Fx@ z*|xWyb7&}7+bX!e|U+q9Y~aS!b)w3)j3e z%RN)HphA&Jui?&Ue&+PdgG5}^M)Q~nA4AAt^ifUSAk(k2g#}|E2 zid>;+^To>4s5kQ!D?gXxRLwq6DpkgIZCf>{>k4&sjs90nTu0Nlac37$FvsH_Z^E}0 z$`-G2MeRLu?DC>%NvW~>7Z7r|dE}|fnrVJy9kWBe;K?O;gTou|UR`<>kS#97!2XW=etIr>BAXZxLbOFKtyUOVQC`XiQHgTHF<*KaF- zLDL=hYQOU_ORUEX0af3tkL>IycOZH2eTQbdgC6EE+Vh9^qO2DxQToUjJp#%Y00@-~ z(y0#8en3tu9e862R)jJp{((i)2|!H(6QCxJ-)e6e2eli86Gxdg4l10HoMok(tTZc} zOozIt|Kfr1Pf^cwH;d-7@F0wJG?s18c&lhEV?0wAVP6cSZm#L0n)Jr&Pve+SK)r_Q zt1cxl`XTP@9Teo!mIb$34waQ_J#OLGGA{P{CH_)m(P<&@FdqI2zON$dn&xF}RZ(?~ zYIks}ALZ=G64o(Sw;|cWCTV~O$`Ob2HRD0FF6>9_8Bbm>efW&4Vd+Kma&*0nN%imf zg>n|*tg}P5aN+eU7~$z!--74=T#kXi@4?@$aB)ulwv1T#+QsTzB(nMwv>r8%**%=d z-0C}|b<+UzIuqV{73133^N&_?h82HxqNTa#!h z;5*CJ?0;RJ!1?8~yXDyLzIep;zdqUXJZzV)ubZnE%vze3W^K;2-m6JTr9{h$#FY12i`gBYPKdU$WSu zvGDUo?&sdAeR2U@{tHIc7GP~mUV)_Uo9 za(AD!k=h!w*!;~iaNF68Qv`o@7s9f)T0_t0|HGx;g4F)j8L0LV|4L^EkscNvSdWp^ zWppc}_zI+=5r^|xh2|d_;!~o9pH1S(@DTtB@t4AlvTzr?Ae-UMUK%AuV|zA{W%t&5 zTB~Sxs;j!E(~(RFMx1ma(Ur1_ahqDF1-wp+T{%q_in6X*R^jc2S;;sYU}9L*MWhS? zvHBB(M(Qf{eS-=@jj}N5`#h@mac7^PV6Mm4kWsF1$8rEZYxp^i59tDaHOsR-3pVC! z%=)kAtT|0UR@r*VJbh%OHN0zKM3Y~J?3=O$NzqI%VOR|>$ZH0}eg~n#u;3*Ov(!~X zyO8C9V(%IhbASY!2E|;GhymnWJr%W_^4ZgzA3359EVFQ|YTy~Rc5|C3@*#3pZlQ;x zp6c3B9T~_1X1KZAH@LZ3QaoZ5e)uKM?*mE1cgYq^;$I>^I4mgY%ghe6nfS!^DV>ee zP)Jqs-Cb~nYy^eGYe{LvxYHz_1qa~G!IDaXcN;~NxFi@erL|~0mLfvR11Bq|K_Ej5 z@*$YW2{!>xIbCl>O$_C(ICvOq3=x%z+a*-o4z|^_BJFg#LCrz*F+#}!;)Vv`JK$7t z2?Dg$lvZ#MWit2>aV9&#Hhm?OgMw^|>iR(&+krcO-1Y%8HJ+>PalqGg|(1_{48icCq4C`nrhov;S2!SI9a57nDEiz+}- z_}y;lz;3tjx?PGXNdDTvn}fkG z|Eop4+ZAcA+f{earfyMT@a=n$s1YX)jRe%?#%z*^VJeDM6U9dD86YtWBs3|!&Ci(MlhX3CG0lcWhn*aa+ diff --git a/blog-generator/venv/lib/python3.8/__pycache__/locale.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/locale.cpython-38.pyc deleted file mode 100644 index caaf2de57b67cdda516c44875e2c0862167cc142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34727 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 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/os.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/os.cpython-38.pyc deleted file mode 100644 index b9f6dc9333f1a8ff970dca95ef4dff853b33d2b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31361 zcmeHw4RjpWb>7bYV*!F71yLj=QzM!(urdfLv24lup+u3OM2iGz0urUAJsl%?V|t6<4*ybzb)L?P+K=Te2VN~oktskF+dtm;!a)vpHB zCN-!wt0A>TZBYNwN)PwPKZI}15=b)g^aUQ-*G zj2n5FEVg}mp#Ge)3D2{Zep1(txS z2r$3fc`L5=IJ?!T%CE$Mf#y>o!&;RyN;o*#)|d0#XiotX)7wObW~ zr+W(d(|b;DJ$>Ej-O4K5pdKx}U6l%B>I+IK=Ymz(t14<1R4}g2s49Ns}o zaH4)e&8r$p-Y9FYCV2W5Cvhh3Tt9C;o7DF@-zrz5=1P50l~r8TKN(jI)x3}>yhEK; z8ZF->^_#4(T;<`;JJq5(hu?Rp^Xf7D-mI2X3%|Fh$5k7@?^es|3H;tFFnQ{ndQ7!c zTRkzGmR5dIy|aR~?rde9 zy9x)uH+Er_-aVfK?0;fbm->MEcJy-q9Aq0f$OoOwdOL)Sen@>7txq@;SZ9Y%PpDr~A5qT$+IyUwvgZ?pdu4ndWm)Im zXH)u<>SO9z)HveY=^UPWk8{MiPre77Lo1oW(bGrNFRSlRA4dzvq~>=@FW;rU8+9g~ z$(7i{@xt-KiPMvy&hG&=rS%@z`CV zfYzqfbLtcLyY{oczo*m>sZZheL8M^NS= z^`q(q{1&9_kEj=B<3YLS1rASLQZM59Y4v03)A)T@%Dt#QZOW-%Q9q%EG1f;gpFgR7 z3iJ6>EAhhn)MwNcC|y*aRX>g2M=`FSkrDo+^Jt-@e#R*kXHesF>Ss~oXB}&<3>r{^ z@i;K@RXqDS^?5w|JX&+qzg9nwRw^n!70Z9QG?|RWj!)UTvFKInj%!yM+Mb-Yk)CL{ z)yHh*G@ZJt)@SWT-9CS&p2Vdd1pjBxH+E7O`oZ{w)0rCp*{E3oNe#5OSPI^ zS*(}6YNL)ebz{M9N^@wp?v2^b`0Tj7Sg%#<^JBK_m3Yf5k4xQ#JKijLXKc1v_0Blj zRF!*Dow=}Ny|mzTl^l^?MhN~$-5Uu@l^3Py+sbkc$HhQs9M&r^( zL8t6B^pZVVs+}(_x%SBTNIq<-S$gf3Q08(Cb+zO=O#;NOM*(ihUTCSV@-vk3BlF&kXG0hdb~%k9l1U;mWDIz`5O3ZG%yiYTdPP<>-3Jb2jXCvQfu0 z1E2dky%M^vZUJ-?rGUInw~MZ$>}uWKbK=1Cy`0<-gP3#RJsLYNyQ-mvhf&y-Y7N9V zI`Xg%##|46^~3cJ9LlK(Sp;~*WofZSC`!6~Mn)s_>^$a_7roL9nhc>(&bj&`h%~6l z?o9bcMW#d^qENMr=^5FF+&GX+SugacTlBF0mXpeH`jRi|DM*thLzIA>~pszWl zbB?JKQs6?VUTrP{B+`}Fu!HrP3z~A9wW=BUT%%ggkLO;ZQa$OX4Uze2v-te9Svr0K zlkaB&3i2}nIry1iF8w6Q-cPasZ^|_J*{O+%`-)Q&(?Raw{U?Lm#N;7ATfssuH?6a=R@+js9niVw6FS+pz9W7%iOO+JEcsSZhMtf6@$nmdt1ee2+0N&=+iMsR*~0!Y zwu=o_EDhui#9G%E&BTbXD6-i2?X^Z3Xx)!YSSz3Ole_?OijXD6qCa@R1LK}q^qdK; z8`@8RPh(Ef3k|hcbJhZ|WnC|$go7B2S#fK?8npCVktaPs%K26fZCN)UNpUtjJ%We0 z+FU$?^-zpfm>;iut@x%~>*_ieg6%e)ac@gp=$E2Lk4)ajl2i|Z+Q;rYbmSz|W1Je_J*3;0%AmGCZ3IGbLn^_3E zqrg6ReDbiLCFd+R>J{{dIXhQz$zM$_Y>AWlz~QOj^60^P4<9{n&r~5(K2xccX5C;s zxR1g4>00>=2_l%~gZFZfW(Y?E7;=UH*lZzpY^r$b$mF5pr>0&a+j)s=;-y!RJzVCx z3O`&_TvM`Cei|7swraJpEFO+8Czg}#B!o2YV3QZzN$7SvsoS_4=Uunm8UnXWv|-|T z2HRR=aPgAhs1I}-CA`#f%1gJCUS=h(n_k9CsrX8KIn_?KQ}c1%R*9)tYtYNKu`IdS zMLT=InfuVrkDGSdas2{%%@I2H#V12U4(jETr4M6d3#EAn6YGwO@^^ZSjK#U*#>UMz z-~0%!L{bzR^LHEu!*m{j9%AD&wb*p@URfEp*=3M2RJoE3QC{iNWk&|P#E>)pq zmFo8KDG>&2GQ*0dKio~)Ar_JAd7@FjS+!fG70QkA8Tdh+cEIWQ` zX32A0{Vq0>2?pS&sxD?dpBBZ!Pjb@reJqhYgVFm*uT-rSl4X=xBkA-cN_`n$cMpjnW*3TR+s9CI776c8}hgnC~a=aaP zN97I-hge6vW9bSgx+1y=G!dcr?V$JsD1JIzIcF=zT-jUq?5MJ+P?SCms@Kj!<6MXC zd&pWC>1~)D7P&lGI}1&(mqcX}*Acia?RC@k7|Dm*ur&)Npc8jdBwhvD|55;j8jA?D z3Mwu)uyb^=1CnhrG~{Rj$d*Fj2v&+4t%fF8G8FU@c9_t{y=pDo>=KgmXBy#tB!B{J z*j>b`s6y08BKoZ3Lb$o1LU4Fc;AlIcM}?ci-~uYe zJ)z%Z$cd$fp=48I4mIXLw<%LH;P`3K?U|5njfq`o^ma%dqX@X8jT)xE?ws!>QqdA3 z=8JVIHUv@!QRq--D#4^cCaj#ALk10wT5~F%kcUuj4Shy$I7dDVce8Us~uPek`so!UrR-n}r@ige6a#6}0YKD>~)vzyM`K zS+XnOpjdnmS_FvL=rjSHc(Lp)V&A+_g58YFA1q<1v4~Yvp0^=f7pgAJDxAs?vqsUA z*48kNh7QnK3q{FfKGU^aj)8=Q3+vmMBfXm?l=Kt8l%D`}mtRMjfDm6sHM58|li_E< z<~z$s7w~kt%#{;4T3gYei<9S2_x$J<%M?H`IgpClhw)^hfV?1O2L5Yrnhzuj;o<|ay8xVo6B$mRUc@lI#+GWooVOvOgn*cH>$*P ze;s2%+gY?d(ABmTYKUliAZUAFAhz7!?nmvkwAjb?&(4H!KM3s*t^O`}6ZFPP;sH4H zyuP^{zWwpo@}}j%cJff{k(-t`w+B&XGc?R0!r^|Qy{SC}!>{E&=MA)n+7|GVSV>L* z5BH)C;PScpSUZinJC}zpQ^N1=RU~k-WPvOWMOIHwJC1Dx1FVk0syYm5ns{t z>adbJH>9F&VEsX?L2Ya_?a?YMA&Y@nY?_4y%VVuFW@9H$Asjq~iB)*x$T%#dWA;+j zsVN$3-?7(QY}Op3ka1n2J8~Eiz~m_In3xJBYf1$rguMmEUNM~+^B!1Y57c0Hs36r% z4Q{c(wggt;6znAAWA5TiI9{@LpdjpR^fF_iN!#v#*wcsMMBVL!z3mMQolZTF3?hXP2ivyX<;lcz2auB0#DeN||)}vxTwV=Nl2li8x>;}=4GD6dTQebG z=!PW_v7vRjbsInfdMUcGcNA{|ni9Q%K$`}|&Ob)5@QgNi>bfD#lyM*1C?fS7_Fr`L zVD^s5xastXhJBvabS~4i(`rL`mc1hk^JQ=a!|`Su*aWNS6Ai=A$B~Z$3)tZSF(GK( zq|`Mkv?%6v+0$ZRn5Yhs!B{T@3qx20oWKQo1j z-OOwaL7_42fc_lpyLy%j`K_Tywi}MasICBHqnRYf=|E;y_}xo%LWny?HY;e7UO=`9 zqy_e?(L5#?bk7EYy@@O^>7%CMS@fR%s?|h^5g>FE1x=CGCrlI0t=I+(RHiG$u_%1u*Z%7A`YRz{0NV#>^aO zHDI%yNdRbuR6B;3N~2b5oQFGiVWxpa4f9VOMj(K>hEf9fjoX*NK=ina%@8RI#1^(C zverD;UMW5{$!*`mK>x-UR!>WNU{` zDXb@oEkPXFE*3F`P<;e52$$PzXHAA4-t(|_1q>jN9ia;j+xSK7heXrIS_)=~KT!P7 zIYzHHt;(#dcN&wPp#HertOvLvDU@qf+R1420$?(k#dmJK!+|$y z>hBJ=T<&gcKI`g^-Mft)k0nhx3~n^&dsJk+smLkF=S4UhGRCe8B<+GZZrsjpF@=Ha zqbHF5Xjppp26|8z5ZIfI9DHC3tU&ZH2{{PHfgf-zcih+-Mx|KZw%-~MgvbFKbtAq8 zHO}CC^6+$ilb^1*Bqn_Tn8e{qKk$Y$={+@8I~e(j zfmgs72~mpl>?esMKS?smZ}Ago$!rj__0W^pbubKn_Y$>gq>1gc6e(Bygn~DPPE9cPT#6H3k}8MzL)$#<^@Mb{lPm z_?L+%24G9f;@|doHXaY`G+TpvyKx846FJx#2jc_rY$9!?&Ans}xumrncLrd0#0E7r zWbI6_9qG%r#xKSF&1T#o=3GAwK#LU>S@>!6&)`c75J7Z5iiCSt4>oo^?7>2*kaMpw z{?6rCJK>Idu>7caJE;=SBw({op)~CFDv7If>u!{IpO;=P$m4E3k6PJ}ZrVR*L&9?&G`+%UblQreGmTm*Q~m9eVXW6iIZNI*lk0 z;114XrLqUx8}07GYp6yTPHwm?gj=)|x@qlBh|K|2B-aghLvpjC40W^cqe1CM$0W-o z>OLy$>d{cJ@S37nfuyPsnPkMIJ;-Uq2Q?SHv4~@k&9TLbdQ{|<*%>IuEki|TxQccV z&0y@2YxZ0nNCNIh=%&FXOX^&y?v=o@!F(%W$Kbmm5I~-YpQ<+k4Zc)Cm09SG*s%o* zF9J_PgGKxZRXZ>w3c85G2(EYtLVcOtL#fALKzDq~jmIPwCM?5i)C=x@y2eOnB5~BE z>US_?3vRK{yEK$gWI?;deNj#z9z?|rAF(|dB;YaPX*?R0E&G4~${?;M5XI2qDE$O$ z+5_ zwgc(wHpF-qC}wK03Hm{$h0v;Y9<$70&O3+$;)4h{vu~<3Ahuz$J z$;b!?Y|ebvN=@E1K)p%H$p&6sda?uv?+r>&*5b$SD;BGDi41vm{}E@bC^_^G?)+sNLsjMiU=u5Vd+)W8tLb!q?I3~{M&`% zvFnDdY=WMNK}bCK(q4(jkwaKU{FT9kUPg&B{m$WM2$=zVMMA-V8CqARJ%3ZeVB?h`xRN0xK#+?)k#VO-w|N!AZbX@Bdcc5XFs5puhoSxvV4X+3QBsTeG; zHCP~%ZOAOxD|78^`1DllEd9(W*j58Sb88#gNTZF9cbDQZ0x9)EXo01V;~~_35MOvi zz6@EHX~TbANzy7Qy=L`qw=?xDBwnW7w-SeS@hgCFvYmn*@*3268UF5m%3u|TbRDSg zHn8Gp*6VxHYWKre*e~PEqDB6ga=Z)D8Y9M? zldzHwM%L!^S)cM(q0|$Dp}o0vmq7FF-lo;T_5k47L^+PSFXGN-jH&-(e0j4s1pDb` z%5vIWS18Y8kvtz@9m?~wzSvrSvlkN*IhC3`i~uMSlaLj{z=XOqZsfNZm635_dNUI$ zQM$;4-Z9a}{6wqT6naNAlj}N~8;uF>YK8vwA`6~lLK4?YOsKo*7LxpsZsVsw&5<&{ zkg2-Hle~u5tE@50=yb?h16UbY8*%#b@DDoQV06XDNAkXJ-E`r9#biKHd)=b+zx z5I5FhEE9}ugeVh&NrPaXA<_ha$ne8F5qA*ZjXA`ZOfLb!aH;;^rx!s8L4omh$=EE7 zkrsw4T3)&HF((wraV{YQNrIS(t0ytgHMr6r!o3@bC&5fwuA`kZo(YDCL%|Z26vJTx z&LR;wt*->L(S@kj%US;MDM=8vmKVPK;xmy`8D&*D|ZT26X#F!2NwGX$IHyP#^sDpouBT>PU@r>I0gaiKW^ z;VH{$FD=p46{uD*T*o{rS!uX?)1n+cv7A9meNek%P+zjGt!ORVX$?x>9Mq^ zxZIP724^VDq|O5i`Ax$5^|vAKX98AWw3ZrfX~r5DU4y!ipI9h0jTLIkVTeswy$>^D zLsTDsD=rTl3irB39g={e{*GMHPobGYAL&$Lu?rb2AsB1DLZ1tViozNx`+ZblB%)kj z$6m8^Y0}E!TTUTcD`EeDVry5>$58YjNq_-)G3X_Tn1cob-6hU|3fjPE`wBE2XfIo> zVf-7C``e|wW*a@ij4O^hoRH10BSY=D7DG@yq&bj241$5oUyWakeeC1Vv#r&HN_feO zh#76c=f9d#$%}}ugJ#TVIz}a(h$0x`K{Q=Pzlewg*q@*`B!ZGzFD=B-iu8LN@&n1n zL9!q5`V?$dn9KxY`Q+Y<(8S|jKkR5PB3^(*i9StqMNluRzvOLV`PD&h^F{KDOzUeW z9R$n3Hw;w?QuXX24qpi43N04&jf)8*^uF|n-cZ5f)ZplGM?)KRs|#>?h%>JQqlr_i z*(F&KcKz0X-P%PaQ)J%eUhoj`Z8Pu7$K<{W|q@Np-Lus*Ib z{k=@S3rQgtEvT8btA-1l(%8KbnOH6h-9HI??*J^n+yih0(Js6d7GUlZ;;$s*$vE}^ zEN4Mu8a!ssV;zG59hfMymF^G4*G5HjeA7=6+OxCELSsG)iUa|O{ z7?7w)G4Qp{zt)xz1LI-I9t|sjHi-^F#eQU3!#Ht-eHdct5q-)13iu9=7)v403105k(GffR5dEg%8rz@6{l zSp&`lBd>8Fod4ht>6wWRc_t0|g=PePP6PsYIS2aFND4Vas0#D3!MG3#V#f6%$2EWo zF&P(^{9wFiDx#u2@-du>GHOcTI<-=sW#h3kSeS-_iNKW54s~|01A9W#JZFgLdE^4H z{Uktj1^Bf9a~Xh>7K@)Hv}AQLi1w`2Oa4-#2S|$r@jZyIP+JIONXj@(1+S%m0z0Q5 zZ_NtC={1xn7C+CP*;dSI4RsN!JY3gl2IYt$!Hlw2p);&nAA}+)j4%5XW}Nmxp6t7b ze_&>*$=2q8^^ZRO_~XmV%lTG(%O-9 z#{+9i?(ysN@~t-0$$SESQXEe$d4?5n1!Een#*dkRf5jXR;+UzBBY}OlGeYFCrr!TW zB7+MNTGlJAJzePFne1Y*>pWms1+wXLY;J}LDHaDNzzN*0PNX~O3G;0l`T{#LY(mtx zSCX&v%(*GmgQT80=Yr*&uSCqtqGz`3b#*HfF5M=}jpouXu}ge8(VL=?@yR+?#Q6}? zVr>eL`3xdbv9`%@nC=M0iNWGVJSGR$5k%R1nLP_}i?-UjBI>njsaK@pg%g#z zBJJrowTS#cv3Pc|B-%2t_aY$DKhESQnEWJ@&oKEJCZA{W^Gv?Lq(kx%F7zrMe4GGn zMFz@qUpAXfBTZ)$*;Fn9xon38`e{_9O7I9eB7*uYaABMc-fT< zhL$s1wsoi=mgUf|Esz?2I=tvu@y3%rm)r)@$9@6Dup1a>2wxn5fUbMJ zn@@>jNAE==`umaKtP-?S{R_wfiyKW?U-^tvo`)w!|5uWTq1haC#nyF2b4Dy+WgSKk z)mS$Q63!L)iWI`Q0r6_=Vz_cJr71)zIa+@iWpI@?a;?LcL=t|LaIht;+RMTaDRk># zASMNdQDjI|j7-=VldGwxz|Aj;MR!vF8YcPEN-`5~@*X59E26Xw+P_9$w0K||6LIe8W;U3XwR968- z{|4@L!SI{7{EIGxUbcVJM!wG&3S_v?vZN2qQYrM_gjdpX1xn8aTHX<1O_k1MGW3U%Fe?Yizz*86k;@KoO{{z^{3?aY;PK+e; z{0G-X`2D*69h6?j%SaLj@fET(hmW9X5{Xvp(mf2g-gu`<(>wRpvMr^n76AxB&={5; z+!bawI*pBY6hr6Yg$Il|3nCgNWY$DTGH4U;a)4?hZ}$i!g=qrn61>wvgeHSIxS41C z8{VJ67!WMaao|g48mdsA-~o(+2vlA3DE^COsH$gaJ8(3b)aY%inNvnyY6B_`gc*`4bA6gzw!Bm z>s$h0zQH+VGp{wTGG@#y`GP;9 z!!jsqB;ZZRkn|zB_zPPXBpBruBn;k9kzI}jSKQ7+ic#mOaEYWQH>4C{v2T+`1A8f| zcsPK~cOtANo{BvsD~#gGD6OTdpi)f8i$TQuN4*Cx^^p*e6R;H?Mcfq*qR_q~k-H#y zIpx5W&|y1b8zN>y{$pZ(N7k_Iksvr2A*Tv4_R&H%6if3JV^I;!!lw8+UbjynR-$np zoy$98&^>g^HSLfGgz$uKUWxz-&W5tJk%gHu-Z|5;$Fownyu%6zcw$+8c#88haM>km z$QmhEICP>4E1rxJGLtUqz|G0EE)MQpqzP&}F?eTa`DyJeR$RV%rQDI*;d@!WiSv0# zUhney=QD~r|EA3-<_UpN;e28qBc%R6GoQi;MHK!4=j*>PiCDE5|897F(-+9-g#Ily z@!LrJ9bgI_TncG9hC;v=HnZ4J)SYxJ;vpLn$4+*fLkZg2v+==!!2$ghT*0G`uxvk# z_}laFA%7chrB4)39XNt_{+uXI9+zBSm^)rhv5nwEI;0+X5MP(-5`;WH0$;S0=TE2Hc$a{zlt0&_I1*m7d_rS}6Zt=(|8K(r%-gepAG@RVvW!oxHU?E-53op;_DhH9n6A8D*D zRP6P0O#T~_5hhj^ZMFYI@@2F6bcM+UCQl(LBzc~rkU$58V?or3M5@3h%@~y-SU#!7CFL2tIy3@h~wX4Lt`jjJe!|_&1C|F_I%x)PfT+tirg&63<;k&W$4# zdGm*T#~pS^@}X)-&JJ9JM?W^M!qw7K!FWv&Hp_{IlR_cPSJX>hGvpQa9J~nNwp;`4 zo3~~Js_0%!-WdHb&zW<)AEIQ1 zvnJX_rcAv#{4l@aG_(`JG+3ouqiJx~&4ck_f8W(`BmMdyyXy-ee||8M6ioT|Hl z=}XDAQ^ggyR&&k-ORW*jSyulg%Dv(Bb4xUF&22Hd26}nKcWp>3pDTD*u{ODI60Se(+3OTle5MFgX~BwZb<`S*2~^G}d|++YSFLuJV@t zLm+L#Rb+J0+9x8+XY~I-*&fV?LP{`C&lI%;Mr1@f1Fj{O6K`t3TqHUotJb@sWHSB{ zWESk7|AZDy7(ysgXTud^L{!aL<+KUE%OZU6YilR&wU*4OXvy>nsMlIE|IGAWQ$@s@ zqcGZV%>}d9{7kgyvig6nox3-_=pO0J=9^e`|2(I!Ij7OOq-@%7T^dPNYdT-(S(tx= z^1h{|evcMO)jv}Ie;gN)fp}-fM-_OeU{8ei6sJBFVjhBfah05pyZgb98RmEx&tzwf zKiUzirIz`}J7Tpo-VOg(aByM-w#hZ6 z`g%$Ygr#Kfo||mFty)Jc3$|+I1=!c&7PCjMhqW*Cp#_1yd8pxkD_A(++8oy4rqaG% zo9+GE<)y_qL>Ij@F+6|2Sf5#xw?->A=HPwQ($q9u^eG9TgF(epIJ@a*P>@H@;Hdv! z>@3AMiPrVY$RnEb1b#X`JYzoRejn$JqfMzFuQm#)6Y>Jp5d0lE2&0(!g z(>Mxv*+!QqsTD4 zgy&AoNn~>ZC2qkH^YwIcE6$IE`7+CPf2btgg|B-%k~bem2Eje3{{c<(P$;151c=a1 zKrcQ*#o)s)A_A%tCX%7E6O)6OE)F#eS;5rsu7(|H?M6#n@P8aF6qqg$RntLsCteFx zqYnqm??HUsTaYkXi}rVfG6gXsjIR-&v`zT1CgPy|u{JDExS!aMdqTU(Ng+Im^?ixP zHMn_U4GT^u!4if^qvc0jcOc&vP^6GE_5zv~)=uU*JpWUUW)K+@E5txR8eU_=YnF2kUB>P5%Znq(0qIl-1i;`e`m7|lK zjR5h+f4T+;6E4T1#p2hx;JB(62|;tkVh8g&5-svK zUEQu3zKO@0gzuMe0{V+gev!$GOh_#{10Zyc$p8}xKk1B7a^j2Ns{AT@8bAj2yad8b z@SXzL^<=$rDB*|H!|!o?-J6hHUZN;Sjam{x{fRjQdm`xGdJa)h9|Z#N{`3xC$BE(% z*m_|5%gY)H-T5y1>+(&K@yV$_ystZs)2J74?WgAv1dOm?dDt1OjFXWxf5&lhIfneO zXV&nr6R!CbF3j+Z5nONOx(Qy9U?IrdGG`Pdg!4uO4)X9QUi8O*2qOWLfM4zKlQEoa z$lyf^)?D@~2?hy*&%4a)IFt$kMJb+DKsoe*K=QflMWi@2z)er8RKh%%sBy6!GO!rd z$>1+=n7=H5gD(i~#)G}`K7^k4*ucUDUP&{xai_rq$#=leX-#E(c=xl45CSqamOfM#Xf4I%Y?~+5#lsT#T0v zV?ZH9kO=4S!UbhszSe1?+cVh(^~MbfNQ~$*?=LA9Tl>1TjG!$du&b%yT|p+4r*(5w z;qhh2m#`ro-NzekO;kef$T-%=5e|sc37|HkK8WY(S9v+aWot9%F%cJntoG005+aa% zrC`o%a18}n62)3}o(X`7WAVDXQ7x9m!HgsW%O%(xQUp;MukaXZ63PJN%0K8W?EN%~ zmRY|0!)0<8z7prrQ3-GoHaQ2s4I{NytU}t!KtoJPKCAF2Ao3Zwp#rCI>)?SIpaO62 zuxI#s-7*fBm{(>=Pcx2J3UT5q74$|8eWqPWm0gpc7}(F#qiM?*maA=eGwq>){ZVfdP}VrApCm~ zs!>KnW1=)u_6JMBJS{kQpM?^b{C)u;xI@cW7c?EYvK0^BMkqM4EKV=rTu?G@Y2IH) zQ$*Qa_=;5N&=mg)$Ll$+0E7+rTZ;$qcgobES}i&Zwa#42euPA}A=9mGBJK|d6Cy1o zSYE(J8R)D!{*?%c<@>XX3V%!^Jf^dR7yxQ+vJ~-mTBK-Uc%zbCC=zKzIsGnThdVTL zs-SiC`T=aLr;^aQ3Ogf#mPG}F?=?`!^^W8%oT6)(a4I&WU1|)s5*&O14&v*#Zvf0U zMY$BkF>%?kZvq4X9R=d=A%`OhkF0!JC}o!{TOa)U?t{ZK$>MYu;G1_;sKUuU^HVJi*svz(8@LOU8H4(JJ9coKv! zmSQmN99;jzPw6-s0fKC!rI^?BIQF5VM}w2)BEWmzXar&2{imoxEklm9A=Iu>J4Z2L z{=ympDR^v-udgvLwFzFzO{E1J>)_9NnSgD)*oa)-TtNK^-wtWogerkIm^Bt>@%I^) z%->SWciu|GP(Qq~w81|ORi@y@i(sPwmXqcs`)oX75>gPZVS*|v2pU1~Cd^3XGRhj% zi>ReVybg0#G&6d(<+TfZTZ>4cP85=8$P7i|q0++EVoBkzId*d>nK?}k5U?~UsdwSV znib-2Sy%ZmDM5CeIXe6K>M|G#zOL~nLb-Q(5BfZuPfX*j9tpjGi)qNquK&g=BZjFw zf^6C4b|$}tqUNnN=aKV=XBKf%uUZd-=@~lZ7Sa-B@9Jw=cn6cWGU;QIVX}wG2$Lcb zzaKIhFNd69s1;Np{!t>T3ub+dvIJf-04h)hRq49N$9^Uth(h=$hhFy|9HIo#H!#`9 z*6~-lJpFd$3W!IRcRR`(?(puSLg$R3Bkw`Q8yAaJPRjdo1$%OuoWoGZUJ7 z^dB+#Dw98E@@Gu`kjY;%`70)W&4gYf@j!?vThrtz_AS|>YVPbh`l|3hKXKshgQ9Af z1we}JqW7ydDKF0D02Y#EzI(zkh)X>qY zq#KnS4xet@=qc|d(YO3d6Z&K-XJ@x%cMipK?~e`U;@8Bt-k7~57tdxezKona>Dw01 z*}1(40lJx?K>WifXh*_=!hH5x7!eaWhB5-OY#LWxG2TgZnMx zGpjqZqPU)Q3(INbHZ|NL$U`3rsxX2YDEgEqBM<3I(5F5XXgd!@ffhwwv_R1W1tJtk zzjJ1Gm%C!x0wpnb?%cU^?>+aN^PQi&Z;g-J3jY4$-;TdO_H{-12YT4~cMJ~~a7FK{ ziXxPnBGj5Hw3>#yF7%oqj9NhyYNjx2MNzC-!V+e)R4eh_uGxGatBvu!Tr1;VYL>4l z!WLtqEXKuzm=sfDkJu|764T;gu}|z5Gva_aC>{}q#9?tnJSrUVm^dmP7qj9CaZDT+ zCqzY@6i_lW1j1nzsq^I{VB zhrIII^qS&5R9D0cVjL|Gi!)*h_kH4PVh`^7#aXc*_Zjh`IDq>BaZVh<{h;`|IE?!v z!gLSeIxNnMBX~X{z9AmP{ZVm2IJi6FB{7HlW8!6T5%;5>z4o}cw64`=#jE17sD7;0 zo)E8ydAvI&%tfVg#r<1s^2KmtBMh9d;vZ zs^eT+^_-*m<57nubTF(NIBwHN$K?>8V!oB&li}@9>hdm1zWcm(nQPIZZ(LmM%;Fr%`IoibJ~%&+-?#HK^UCM_Ps|& z9ENiakz&&xU}=7GN;LrxCIc;dIKy=)#`n%TD`B%-&fCe#^;y( z;Ou-ml2lpfl;(wZYd&ZO4LObu8h-;3Bp+QZb6 zp4;Ru2cve2^dqXb1HTapuTE338l^?)Wu5GNhcJEvI@tfCx{m82u4o^MSV@#vy`#wq zp)M*y!=*rV^@X2N*Lg{uD_Uy%kq-rRg9bRXv=w{N7iwzIdcIKPljw8*^86~qaNcij zx$`T2Jiq3lb2Ds{X*lfpM#gOwDMLtCZ?Eq9IcES5i zAF8j(r>ULh8C|4>wsW|$9n@^qQim2=z&qNrSEiOskeTg&>oE&o`>*ciREW(z%0mbFCvBkfbPe5Aaq1ll`FqJy7xfgR`^i^dX3Q?=cT~$Hd^tP({#aGs5=-;-J}<_n=zK<VhOD$r6gn*r*uj8*WRU#;eq#uj%8obZx8UU6wMG>BLKM zEd3=&Q1)DYnN;?=D+5^7bZo_g4e}cdCsXyts@GVryK<4bsiNI=d zG%kY;c)>j1aM}E_C{({9FkSe<9A#rcVgQlq!0*(Q5qQ?B6y%HO%)6heernLdQiGN< z%7iiW6S$%Y6pBtvm{1R5)9qnp*YTE+l(+nORED=a)&c)V1h7eHT`jPLj+)WcVgp;L zB&xu+-!rh0g#}6OGh2o#TLwvVRd$kf91ZdW6=zVSrFzefSM&j0(xDDyHnM_owT#C$ zu8bPc0N7Ve%|JN>T|*}9AU+sS15xP#72tze|Jo?)p@8tH*w684aU+7)RUpa7AQ86gC|b!-NoZeHC87!~af5 zPlZV>u=gvf*R2BB?5bT!*YiO|jI+@w8cOis}$~#J2*ftY&t;nWc>m2)4rXE4X z#!}csEI{t*D;0}DA}uu8Z!EsKm_fMxw%crHa4t!QQzLu7SiidX#=`4qF^cPm4?K7U zjM*B{WJElt@Y(0MBBDvrG@!-wC_IyP5x6tSBjk&#!ZxJpHZiV?E*qV3Oc?I7y`t3$Hf zC+jD87?9N^PW}&MF$}6}Cj6VT#M!tAkJ$obelsqSZMs9CX>%Pw3fQz04UV3c&j7!u ztB=g^JHs0XDH$VchO&?tNdb23a{<6bd%0_(z1%G(W>Q?&KN33OOJqOwCt0(*0Y}pQyWeW`0HgYTsat`3qBFKqh-H1_WH378xJ&n*w z80!jH3nt?oJ?q%^ABqB8UTeK5|4-Tvu*>4(%9+X8a&y za00XYE@pa1fq>w9Q8=J<3&GpHF(5vefgJ0u2@_!QdjB$>NK8?LD4CrJ%rTij^twfe z&`du1&qqg3iZnkN5gOq$RnA~tQ%M2e6@=BbKz*reC57!hiA8M**>zo*H1mGtGqrU# zu^>`*=grF;@;V=~Y5b5vU--xf{A3$JG%Cbz2jONg$BvQ+ z5nHjNRApD;!~5!oY?0WZO%3{JAuYVLc=760b||tSbMFr4Xdr>)<7SbML9UX#fakP` zAkvp%km{{X!C`-Ev+ax2MC^!r&1`MfDcH7N_qHSda@hN5N>wG`W?2HDnHp|uHVuNg87A3)fL@xedhis*B40N@J4gCS4G zQp>pLpZqip$UC8zwX#O-)Q{wS0$-T?oP9MU>*OExWxck$tiLTFzoSDo&kBo2SmF`vC>a`|l#gJ?HjiLq z1V9&L8_)#}gC0S$Ovr9ADMmm1OuhMbQrs>JfZz?hg$x$A$3+=3SV~IU6NwH`{X5hq z6C)<~LZ4&3)7rF-fDXk6D0Akj$)x?|_?x_8}1?_;@kSY7j7 z<>vPhHYy2xS{`+bHIC&zu@PJ-@k6ZVCi;vaEJc5!yE4(K<(d$!dWhYS_wn7OCK7va zJSa`)%%X{vWcCBpy3mWaG94K7Wo2*?M>M@Hx$&T0jLl#nyqM0*ZD_+zoXCS~T2(cJ$+S(5-3cl!p6^R;KWjOVYz3{UTe^_iBHR z2S^*V36eIjCC7SE5@IA+imnk%L5oyqktT|0v0%m#Ex}^EOv#F#y&=Svt?WsZrZHy! z$)=~M1$+i3=U%Y6qL9Hya^*E>j0K(2;cuDp`!_$rld-NxKS~PG=Sfli2-i=Nq8LMJ z#=xwo!?64YmABjjkPtu0ftOwAyHe_rl-O z_vK;PBI1d5_ERpPGAvtn)aXo%lvixPtvrTzg?kEo77I0#YVbxNi9l62o`hFGD77<_ zxzYe32We!Z7K6dmu-?r^pmCVWP1&`$LJY*Z+f$IPEW$9~Rz25_RoY#M-*LQn>v=ztSA znC#49U*tKYUy4Fux^H%^N3#Jx8A(Zu!{3(B7 zQ4UyGlxm?QQDU9TqoeH-fe_*#;<7@<{xdZ)d5-=U1eEjzR-lLyr)%si!88IR0}x>= zhuF{_NVFsYPfL_?gZ77kB=pFnn!;V#rGlV_Pf!Gf*!Y}d7Xukt_;Hcv1)0xB$t3v* z6>O8#daVfTAaRkuNv$JVK|_C!_1b_rXMs2H+p|$pNKdXqyI!DQKB+DH;BncYOHR<^I}`o z!;vaw^ZItG48hVMSUT(!{6Jx?Tk=W*6+~o0-%`p{?MP9g(`GOVqr#Fv#4b@BRKVGG z){dtg?VP-aD48n=dC{+!7%PNUg*$3eoKaw15Vi^{i!;cUML$lo>lAxIKt4r2VG(!{ z+woXjj>ne`L{9&nd2jK=_M|97MAUow-~d2Slrr9VyoY?qsnc=gEzd!2Hp-7Jvou&| z56*WOJNlrJi4|oqGZO{YWp;`U)WVQ6&;#s6^ob~1UBPz0S0+bVV*7qyyNNh_AP{tH zRDCK{Zx5OzW%yG2ToZ?lWOmN~bq^v;MFZ8HNAk0}>bYhJpo`9<((C*GS&RG*(KRBg zchUAY!wZnJXsb+Rd6nIaF#%wvP8X;)Nd*a^e2xmrLCF_TqCJl~Pxyrs_4d~Vw=TJ@h3C4|`ujIz}?*#q4( zH5*zt1BY))J3?9so!bZf8roN)g)YMC=ro2LRw&Bstr2=sHiwf10^xEDjFis`{S&0f zKT(h@FQ8_AqI7=xU3HnT+WHtKnw3WF9EywFN=lWt0*hhw5U?D9;42XLJQoB-9=oH8 z@<&>B*7aQlqmA=unF^{f{iI?#REO@!7r{!{bn*d5aTYiWOOQYT6Y~I_gnWqrznpNW z(=EUO{QH|PIv zGEQ|ay$b!KGp)$G*@m_4AGPuiE#M-`-a!jYZ!<&$gi|pn1pOu?YA>B)YutGvYoUh| z6$fWg`7boGleFH@*@+lyFngNBIkpZ%d?no_d;1Xam7)jM-3bnYmAe4R9omaTK4B`H zpWnuf?ZOvoW(`>GNQosW&o4;i$hRTw?Hm~__y456^x-qOq9Z5(B>QMF0@zK+cvo51 z-X<^2Xqgsx|7&A>ZdT_9 z_HpE|Q>R4~H8Z0#JKy*{v>*k`KZWU$HNaVxUt06Okc<#!XOKAsFwC750Oej>htM*G zBU{Q)(J^ir|E4yL8ZuRCMO~;IPmA@s2pjc!#t!zB9E_Oh%VDaKaL7lgc#H~mymb8B zNK$Z>9SLF(oU3CH`aJ{xnj)i*_hgLP%2d2U1-Z_W4x}VS9+EveO7}}L$&#{da)XLh zDoE8ilwsGM)7F_cW%YhsB_F3QvsBQY>@bpj(Mqjz*{`h5W5bk)#KM@Q7;wiwxoz1$ zVm=LG!vBLBJrAC;+TeNTTUGmoVOwLCh3l}j$12$ct7O^M1g^4m(mIV>xsXKyYlp267f+LxBSb3~VG& zf&`EOZNBfls_N<{S2>U-`}M2$UcKXg|NZ_qZ;X!@HGIDNXNTT>udQi+!iV%{77u6f z^&d7g&DCtp)m@{mHw-(YGoPuOjjWw(pjahr2%;)M4HXgDcZaiW?DxdT9#~POXcw@i)gnTa44>S(g2W5VwzSn-T zJBd+?^+Sz0`;e}^r8O;6^GfSQ@oin>KUsTN)qY-U8gFavs5|D4yA$p%chcSMPPu#B zY4-tl#@*}Ay8GM*-G|(V-ACL<-N#(Zecat&owYyZKH(MI13UV(=1sZ>cl3ued)__h z6{j`(h?jGp+|lg?_YiV(JNjPDUUWAB7M<*5$QSm9Mbdld89AdFCl%|ei`X2_A5v) z*cXt#YQKu~qJ0tRr|nN8{fzw?q@T4vi}W@7HE-E_(ml3geAN&I@5yVgqx4z#_=mc# zd6(Q1>nxx3p57tMN3Lk4r=4$QH0`p}bXyJUx+7}NO5L-nUegm!&=USav1s8_YX)A` z6TW;n5`E+YYw_tcYpX5Mur_PKTCHgbr&;yXtG>6<@tPHH@ZBTnm)o_!$ zn!zVk`%a@>_wK3P^lH_$z;okX?rjz=$%|XGJ<;d{PEcz#)jZvrABfsYhb6w%YFfb> z8hcLNs@Iy{NjYS^^85d$XBELCU4-5Nl}_Ce>Cz^khB4+YI33?dgHpP(-m0qlbYau0 zV%pa|%eÐ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 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/re.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/re.cpython-38.pyc deleted file mode 100644 index 6440104a37e662134c54cdfce622becb66316530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14346 zcmdU0O>7)TcJA)^AO1+9Wm)q2r%ih;j!jWN`xF1jk|~O|xuIx3IgO31WArLc92sJ!5(tREpP&CzW1uT=Z8bD z*GUj$i0P^Bs(MxR-uGU;_o{h+Vxnx|^SA$c@zW>o7{))-P5&2YVxmDwfHwv&G2uwn%y7gQm&f&$nef*4Vm95s}D?r{)AP{{mAgFj}4I#S&Iq~6sN>#aYjsur^H$Dv^Xc85$DAP@vQikcuqVoUJx&CK3^>eyIOqT z5HE@8&kQjw&F#{YOtmb>o*0MYvb;TUWSWMwwkNBT;$88w$b4p2PlW)G*OePoL7i{JQ+=)El75O1R974epM8^7OXF27oRRa_VE z;Qpd~^>9W$FE7fMjxweJ?%WVJF`JuDtZGGAYewYR)JLE!pcV9%^BR_4m(ds}W`w|voQO1rK6N3M{;i1v2N2^(9kw`u!rshp5W1a8YE zvY}rNxBNh2td1va*R$_R)ts~KrO*!aGy=Qshgd(TQ*#$$@B4*a6L!u*}W0w%6I%Av`5s; z+D&&y+SBvXv-Y%u3nVdp1;38c^8x?bO&Nsc5%PJPX1r%}lReFSdeRDH^N|d|+aLKI zVnG=!XgHzt@Etvgz_*(YX2=o*gL*u*FH*%tMgjO7ud}x_n&?|)8=vX9Y5KA4I|Kvf zavu+XtA=btuC^z4o301eQrqcIhdSwz9e~o`=$l5|`jru_C6F@EmUy_`!D{Lfz}9Sx z2eqA$hozzUL&F^-5D)g+&|p`HaEmC;Y$_?mUIj|fmZ7VW9?t>V(~v;GroFnT2_<9M z?{hD^B^~HixaEX4fWGSjmdtnCftESm-T+lRYx_{gdNbkJ>qFDJ`VFTweRGHqukUJa zaVIY5wVSiA-<-X9(_ZntOPUq-BPbFpe6QCd*YD6evFZ`P(Y*OdYt}m;1|^``P=3p9 z!Ccth03Ui}hq%iWZi2$`$t19F>i(mId+Y0Z)r&4f4{H}RoHnpJ0@x6C;BIPaedwUGjuW8pcf}W4EUwLnxSM&_k|-y$x3ZsA*f+#U7!CPpaRNUPx#P zWEkVJ8_R9Jdu!HiD5=NwfHw`QK14~q%6WpwE!}-)Zf>s9&vBXty1HI!1KZGP503*F zkwJC2hqh!-Q5~>xtxHG==2OWFA}3%+0&kJ*OpaaDQ4<(5dTLrYorL@#HoY=-Sx-oCfVFq=(ojC@vdwz($n#|?br7`1*%gpRO8FW3rlJXn(sZ#)+5c{>{ zcA)`w+$)jo>>#LP9mWrJoAKLZ&z)w)_WYD4922Q_-2g&|JJhphi9LWefYB~(@*DOv z85we5oIcHF!$t!%(W=ZiChtej^|)t1kR$&1T7{_7EX|K^;S2$K{?U&=9RnyPYaT{X+%n*iX1(?q>u67w;q5)t}da}PTzvn>cu*t6HG zU(xG?t#`dX)Q2W3TkR0e4r5qje8l*$=-M4{>|HQ5p7^b=MUL1#xSG+_#1J*wvIYFV z792p~Zn{uf>=N!H2MPe@_?ka3cAs3i^yUK?#XHiHYJ6N z*ddy5NHvrPNpS_@QZ#B{w~hC#n2EOi5h>vEhYRz|i=z|>t{Llg?SUR4MK1=E8;Etp z;Arsuk{MCt&6c>M$mg<~egkGBR+5i~q{t0Zr;yZheK&5pKGf8~HiIR@BGsM7PJkG0 zYbcOMoR82y_Coz8+$!>(HacE|!x7i{CeaZght1R1aPGqTQsLNT}sACokdDukdvJ~!-8 zNZe>J`{CdXbm`?Pk|9zeUQC4cNQe_;^_GNa!6%QngX9E>E8can2=*{(JdToDj)_=yBQ7OFC7$9*lhacHx&(2_w%=#8Ypl=yw{mfV%w{F#>kd1YC@oL&y`IM zW1U#`etlaubgoD`5C98O6QW4Pg=1{n3vtOwQQ>;n0Ui5poUzeVbhma#ZBi$6YeJOF zuo3ubV6>Q7I$Wb3w-Q+Mn#o4?YkxqYM{lv^H6L<<5J)5`#C3SmOKpYD4gf&AE4+Om zA@&2Y5(P1n0nthUH%M>9G!HQT_>Mgb<{+!HzB_BLe}pf{*cyOdadYsgrAmj?=rjKwd7)50UNjC~=ky_B`_{c%_4>8lIG3s*5p&Wr?U)e)Og#s2tlpKt2 zxJl5n1pns!l@C`J7v|R%ZOR+MYPP_OKwd)BD&cpB?jxxI39e~yE!(lh)^olyN+1I1 z8yJ1q-Pq06c3{v9-+}SFzkF|Ld1(csbMVgM0#-<11LlqrTi9=$4brMK)m0g_dLV39 zLUZv;Wctmdo^g7eM%Jr;#Mr})$BL6&y}^hgQ9fZ%8teqO8{Wt55AV${gLU+wgkCZ( z`M5n8!b^sw!B*%snjHozQ5{I^eQeu5TwJ~NAxR9MC5~bVc8QBe@lhP)0ysbvlD%MB z)Ax4>`KyZ;W2fl8ZQoy6TKMp`rbOT)dxQLP-G%AgW2DW+BM2rn>_E@BLuo&rQw)FF zqZ#W+x?)b4O5GIz1ydS?`Op^1#$NC6uozyP;)H#-FG{6+MOo8d(D}(qlw(FlrE~|3 z@_HYOGT0cREG}M@sf^NCbsVJ$lqRdEP&$p$ znd%fuPoZ?S`ZP-CPOUq>1Ncm zu6fEhpjOsxeC|YM2%sI6XwYdQ8tl^m$^^Gm$yW zb*&@wAP35S6z01)0utGstU46AZtinKY8w(ojT z24QI>56H>pMwH_&)j~^BoF7z+p4^0HJ(7{xiZE>Og`qCdz&9>$VGq6RHus#%2yriO zBZ=K;`Wh+Q-@N=tdXFwQ-TLMB9*%pw@65e%8FO#%Ma5bT$#PYzeGY2D ztGF0u*&H|XX4Wj?o5vm9pGA2Rr7X&mR@vO2N~JoNkXWg_MD%#owWwUH>9Z*;cf3}6 z*m0V1%~+shE!Lds zRCPM7id93sKy^4-GpbW*U8+**TU2|NYI{VrmZ|5c>S?O#5sej3(Xp#KM|EdXqW2c> z++Ci(w^%JErO3S3x5(Rzx9-0m<@iTkM&Br}U9YH6tHC~kmn7G|%N*Ulh|BNc8_;k? zmI=v){~(RLReYM;G%~19K2)af0=~g%Tta9Q&}|)>T_7JAHuoRi!-*Jqg6%f^0@^NO zzkDd=(tqeP8++2&4|p>h^h7yLjMT5Rk?=#RjxDUci`|cp80RV$KoUz|k!|`S6BXh? zVSPC)iE`}j4Re87{{=0E3P$GFUhK|^izN=|pr*I!|96+E-oPXk2|&F`m!4c%q*U=& z_U|nUZaqHf|?oeVplvS^PhI?BU{r5=BWuSRU4LHEgr%Jf~p zH~0$K{$o$Jj(zP?*uha6=er?W64wm8RkDL9&&E-D9PIQe5(hC}+y4qM796yhK&O)s!S22%`tz`QFVe@-_1N^~)a1P?fO`t{Mp6mX)!00TA? zVqX(n+&#{nI0I`x8C>MtDZHw53`11$4}=jm;iU%Ii{wLP`Z9)Sk7xUkN$kTBy&z*c ze+UGvaZ08qqeL6yQ@oRPULP^(#Sq*mA4dnh`dt)yLPUGVI4nAT%Y}6`mPH$RBx>7t zfXNC?`bF7`)YO8Qj`;b^ky2)H{KqFcoDHGz(k&OD=*v`r7=9QibHAU=$ z?4{HP;5>~uf5Wp$j7tI1t7O@@XtPpGW--#TQ1gGnSEHi%>u&7MRKHbWiE3UGGX{18 zc1Dm2fRJc0dYK3ZDe#1bkk&M%YT1%z14v9PqsrW7U&weFt^dcgiB6VUzWZ6NTG zPXl3tW5f~D$o63>+O>*F@l3WLcAf)gjA&9!DxT*eAGjqep;_s8Ut_Nalho1|!P${6 z2vz*cH)s3)AFm$IPtxAYzSLKcQM&AnNQdv?awcy+0_wg(jkm!t8;fS?OHK;PyWKv8Z&D1 zrBVN#hUa-%4HO4H^q8loH{V0^2=8)+2z2RJkh5>?zx=E7xxoq|_I#~Dxn1}Il>dz; z5_g?K#bz|dl?Y`~*XJUzd&{2f7^d={_y%m;t)h91m#LMXL^I9H(7a{D{QQ28pGiI? zF_C@Vt38~&PHfM2K~v4sWys?m$1}wHDGO0dKg2%To0x?ZNxF!Y9!w#JfOH9Fh+M%l z#vfP@v$O|&X|7kyDAU+d2xhFgE0O6AjTM!zB=1>+-Q4IV_8!`sYn(7Vj0 zq2FX?p5?)_dr1G>4GZ9v`7`ta=Zc4=u5n}r8(~=>@$)kiPsWJekwqz|aQs~(_?vJd z%ser}$(@|~^ZhA|dMZ3kPo9|XU`+2>jCm%U3UeD7jQnT)BX=R8{yAPp01gOcR`$P# z@J+vI!*9hV2OMe>N5R-(_~iolYTC4jL;?1%>Q~d8q+RlEPrPHtSy-IctZTIjczkS66%vxEbKZ;04;cHpu6zcQ1vLPM75vg`+aL5LP1`;4F;Wgt6 za|JqFqKp(Atw2VT{8LK|4~)tUbQy`{+o*VxW=SI$8AbQUT$glY(s&-(0^Wcvlr03k zz}cFi)=>$bJiw3o6qo1}4szk0_2v;XjD}LQh#{6CeWZKbpb62ShBa=gALDm`8KhM7 zWu>B(ky1g0piZ!K<^`}E#srzx3s5WMTP-!G@2C#hSaZXqe+&4`gmMs&b1R$xRWA(> zlyH3w6+y~%4Aon&rPo_S3$XdbmE||wCQ!7La@yQ~x(3Jm@!WMjmJe>s=@uYDB4AJ^ z0Ap4;^mK4Dh;mF~frt{E31sKNv2jb)ad)x_PV#8mSjx7wfxn*k2(~?3!~T6j4~7OV z)Y@)irzwA{w;t7?A@LpfkeJ@ZH=yKYlDEhIVp#mY68ygz$hBuh9%3j)1xg2bIBfvg zK@`&RXrE<~{|O5GUkOIbJjk@HgDkv+46GE=Fv{*)+c~m&U89yq$~_kr4vR;|0aD`K ze67?qk!=59-8v{76ubGuGHOcQ+~F8njd%0iY_|l;ChjJ>1tiq1jqHZC34BwM9qlK( zXf0r+k1QnOugASI!szCRjnon&o;p0;%^lGU&IkamlGOl%lICx%&aW(d5S7>N-?}@0 z@806-$}fJ2Pi3k)p)<<7Nrfn5k!pi3%XFdSDI311(3FqyzY87%ubNv6>2+B0wyGuk zZ-mEQw)!^Rm)AP=*h#DA*d$cT$g2lZw;|i8h_O)tdn)n0QdSjuxJ4Ht**6PHlm%na8|G+ndi*? z)3M-@hSwbj^qsug)CB!LZulg{+NN_9oUG_fFg8=T3pm%vJ|SV}gPDiF4S~URJiwVp zw*V{f7M>W}*=~M2C#>_v1vnNLjDsRhONviSwGHtbHLF{MSw)AyG1_D+3#kk z4IofB$US_HOdeoh{0{n)?qDnIS&&MRxvyN}9~p!wgHsabX|+WE@IXQ8NAH>t8Q5>be3|C$+2O)D#ihA?e7boz<6i+sNsppAahDH>a9(R)a|-&0Q{ zF3@wVR*T=`#!X?#3+Ysk^(!iDHvKx17g4^`7Emi{8=qd`OoQx?w(w-t6s=cLx=@i{ ztSJ0fW;sWmeEesoB?FF0^0fEc z|ID=hBU{W`Q!h_u^0~79E0xE}^eL3H#ay{GX%)+-&2u?&aEi|Y6?j@4FIvUSWbVHJ Dx>#ZN diff --git a/blog-generator/venv/lib/python3.8/__pycache__/reprlib.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/reprlib.cpython-38.pyc deleted file mode 100644 index 36d4fba8b3e4f2e3af85b1ce84a9860182aa48bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5341 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 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/shutil.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/shutil.cpython-38.pyc deleted file mode 100644 index 3ddab7e14988c5378c2c35755e4bcd3b3e7cd3e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36338 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 nE9Um({PDB71LI>kH#dQ|x!gx{P diff --git a/blog-generator/venv/lib/python3.8/__pycache__/sre_compile.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/sre_compile.cpython-38.pyc deleted file mode 100644 index 87c0962fcba404955e0c475c496e48e3128524e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15180 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 Ybu9HnDwaB$`H1lmL*c7ClTTgxzY>8}CIA2c diff --git a/blog-generator/venv/lib/python3.8/__pycache__/stat.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/stat.cpython-38.pyc deleted file mode 100644 index 72db129b06b4d2d9964e2b0f38557be8b3c77862..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4410 zcmb7HOLN;s5(XfMqV=%k_uGbKI}&A!^doWniX(~yCD-Sx+Wi6f0ekQs^DlDT-+&852#FqUe*f$|#Yy#yJ%9AMHg1hWC++$O4pQX``4BB%C?YoP%-b0)3 z?u58-@w=G89Zd)@{{mrMd7F5G13uuf^-<3 zA{~NnkRFF;NKe4GE6PeAPr)>nGM|KORNmsFGg8!Z6lPHG7UZzLhflTj(rvvAA8YH4 zMS7XG-rcs|y|&(cegpOLIMNN!k=~E>R{GgA6kry8l|@@-&|f+9MILR_am@;7?=0Fk zhdwfJ{hp(ZFL3SV(HBMZYYBa7qCd*$$M4Vw*1JKFVXk32(t^}Ht4iE?)&G+s3bI7+ zlGIcdB`|C$_57We^O}B8YX*L1WusXSToknxPiSs4;G!jX;5Jt^!TpU!;A`HB=J{#V z4<=GttqCMGVlmy{Z*Q!wazEgpZTPiS{#aWP-nvH3n!DceM4(OfZ&P4z%S14krR^Rf zDv@3y2_k(&l0=Rnsgv@~Lp=4%;pdae7H)=V2~APn6)hfYh^7{-agAm}QwT7LD{h02 z``Wq(9A(5)uQj!0uK7IBmN)w~e9)5m8Y)br(vj@`Z&;FkmVTB)mAZ)moGc3+ z+6@g`4}_Ma(4)RH9oQ}&72ECZ*!<1)Wv}7ZwT9b#wHw!bsmnrQW1$1q<)gy7`3YDU zYCQNI54oaXo4JDlMUJA@=N*Wy9)yUpew6X)pa40__Sd^30nZcZLY&JE%4*T%dDFB? z9g|=C+{q`qPTtfwCjTHhgg%L(Y+8=hfkFFR4C7rfXm8i>B=Ru`bzC}|k*GvQh-gwMH$vI}C{Km* zawtP6*F(7#$|98ChO!;XKZJ4+%FeF5Og91gq9v!`Se4$(fs~j2{NTN^rC>SsC*^(5 zdv#0N>Y2vx6&?v&@&|cK{ijSfoY%?Mkqk1)ualsBP_~fA!0CDS1aCZVI9^6-yRQWv zR``LS>(0)t!4vD+_>_42L;M?0i%CQi;wa&8l}=H*8B~MXa)XD7TC2sI5USsMZZp*@ z=+e&A78mQRH_~7|%Wl9_IyLqlvB{mW{(+r*@~5Pza#9||w_i>ugR*#pbtyTNCrhbH z*jKHBSFcuCpY2rXBEb^K7$q|*^ZHAcM7cC?lwL$N6(b*&vsh9W+hBU6l68z?%oTs< za>PZ~k?5QiCvawQiU?g-#5p1th|rBdTtR|E;XbF$6mt~PI1kogY(>YephHd2u^}i+ z3rdHAl8>PME@wdmCW{FB-o{F*`6~ULHCI$WZ2n)F|Sv%j$;`!6$iO^RCZxceFu&+ zdzvtwjGWHS@2xg0J?EI#(!LhGl(Uw~4np5MRNK63dxkPfjy{WPxKyz5=DO=7eCJ~@6)N;Ijb^L&1aqLK6jXf0`3x>o!irkLdz`8FYO!7 z(#u)P)~jU`L9>f{y4i6f)$X&wUa}p%xX)Qwhx;XqZrr<6FAdA7pw+!q`ri-^7}0+y zT?nr;fkgjHqKkU+DW;>127iX>S@QplMD0`MeXp8KB#-T?#ax50n%w^;cIoXOE3Q!w o(NYs~$NN!9CNZaBK9du_De58owt6`^a>#gp%&#h#8As&*1O3tEGXMYp diff --git a/blog-generator/venv/lib/python3.8/__pycache__/struct.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/struct.cpython-38.pyc deleted file mode 100644 index 75b4c86d67ab4a16953499aa773a9f3c5bd50bdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 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%0AfR}pScBy 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 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/token.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/token.cpython-38.pyc deleted file mode 100644 index 7af3ec75134e7303a5714314ecb41f985fa31762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2523 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 XAls9j&-P`9vwulDm(6Bh%j^FK0S$22 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/types.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/types.cpython-38.pyc deleted file mode 100644 index 245ceb223153b6c55dad0a395fb6d51d333b4e6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9215 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 diff --git a/blog-generator/venv/lib/python3.8/__pycache__/warnings.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/warnings.cpython-38.pyc deleted file mode 100644 index 521c85b982d80f5254a5cc04fc6f45fd170ae1e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13794 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 NE!&_t5dB}le*$HD0Mh^f diff --git a/blog-generator/venv/lib/python3.8/__pycache__/weakref.cpython-38.pyc b/blog-generator/venv/lib/python3.8/__pycache__/weakref.cpython-38.pyc deleted file mode 100644 index 2b42f624774cba3867ce5311074c8f515a507ca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19556 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 diff --git a/blog-generator/venv/lib/python3.8/_bootlocale.py b/blog-generator/venv/lib/python3.8/_bootlocale.py deleted file mode 120000 index c0da081..0000000 --- a/blog-generator/venv/lib/python3.8/_bootlocale.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/_bootlocale.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/_collections_abc.py b/blog-generator/venv/lib/python3.8/_collections_abc.py deleted file mode 120000 index 0fa30e4..0000000 --- a/blog-generator/venv/lib/python3.8/_collections_abc.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/_collections_abc.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/_dummy_thread.py b/blog-generator/venv/lib/python3.8/_dummy_thread.py deleted file mode 120000 index 954f9f1..0000000 --- a/blog-generator/venv/lib/python3.8/_dummy_thread.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/_dummy_thread.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/_weakrefset.py b/blog-generator/venv/lib/python3.8/_weakrefset.py deleted file mode 120000 index baa89b2..0000000 --- a/blog-generator/venv/lib/python3.8/_weakrefset.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/_weakrefset.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/abc.py b/blog-generator/venv/lib/python3.8/abc.py deleted file mode 120000 index d5777bb..0000000 --- a/blog-generator/venv/lib/python3.8/abc.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/abc.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/base64.py b/blog-generator/venv/lib/python3.8/base64.py deleted file mode 120000 index 9e05451..0000000 --- a/blog-generator/venv/lib/python3.8/base64.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/base64.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/bisect.py b/blog-generator/venv/lib/python3.8/bisect.py deleted file mode 120000 index afbecf7..0000000 --- a/blog-generator/venv/lib/python3.8/bisect.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/bisect.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/codecs.py b/blog-generator/venv/lib/python3.8/codecs.py deleted file mode 120000 index c3e329d..0000000 --- a/blog-generator/venv/lib/python3.8/codecs.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/codecs.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/collections b/blog-generator/venv/lib/python3.8/collections deleted file mode 120000 index 9b48d1f..0000000 --- a/blog-generator/venv/lib/python3.8/collections +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/collections \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/config-3.8-x86_64-linux-gnu b/blog-generator/venv/lib/python3.8/config-3.8-x86_64-linux-gnu deleted file mode 120000 index 2597233..0000000 --- a/blog-generator/venv/lib/python3.8/config-3.8-x86_64-linux-gnu +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/config-3.8-x86_64-linux-gnu \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/copy.py b/blog-generator/venv/lib/python3.8/copy.py deleted file mode 120000 index 3dbaac6..0000000 --- a/blog-generator/venv/lib/python3.8/copy.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/copy.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/copyreg.py b/blog-generator/venv/lib/python3.8/copyreg.py deleted file mode 120000 index 9defd5b..0000000 --- a/blog-generator/venv/lib/python3.8/copyreg.py +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/python3.8/copyreg.py \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/distutils/__init__.py b/blog-generator/venv/lib/python3.8/distutils/__init__.py deleted file mode 100644 index 59f55f1..0000000 --- a/blog-generator/venv/lib/python3.8/distutils/__init__.py +++ /dev/null @@ -1,116 +0,0 @@ -import imp -import os -import sys -import warnings - -# opcode is not a virtualenv module, so we can use it to find the stdlib -# Important! To work on pypy, this must be a module that resides in the -# lib-python/modified-x.y.z directory -import opcode - -dirname = os.path.dirname - -distutils_path = os.path.join(os.path.dirname(opcode.__file__), "distutils") -if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)): - warnings.warn("The virtualenv distutils package at %s appears to be in the same location as the system distutils?") -else: - __path__.insert(0, distutils_path) # noqa: F821 - real_distutils = imp.load_module("_virtualenv_distutils", None, distutils_path, ("", "", imp.PKG_DIRECTORY)) - # Copy the relevant attributes - try: - __revision__ = real_distutils.__revision__ - except AttributeError: - pass - __version__ = real_distutils.__version__ - -from distutils import dist, sysconfig # isort:skip - -try: - basestring -except NameError: - basestring = str - -# patch build_ext (distutils doesn't know how to get the libs directory -# path on windows - it hardcodes the paths around the patched sys.prefix) - -if sys.platform == "win32": - from distutils.command.build_ext import build_ext as old_build_ext - - class build_ext(old_build_ext): - def finalize_options(self): - if self.library_dirs is None: - self.library_dirs = [] - elif isinstance(self.library_dirs, basestring): - self.library_dirs = self.library_dirs.split(os.pathsep) - - self.library_dirs.insert(0, os.path.join(sys.real_prefix, "Libs")) - old_build_ext.finalize_options(self) - - from distutils.command import build_ext as build_ext_module - - build_ext_module.build_ext = build_ext - -# distutils.dist patches: - -old_find_config_files = dist.Distribution.find_config_files - - -def find_config_files(self): - found = old_find_config_files(self) - if os.name == "posix": - user_filename = ".pydistutils.cfg" - else: - user_filename = "pydistutils.cfg" - user_filename = os.path.join(sys.prefix, user_filename) - if os.path.isfile(user_filename): - for item in list(found): - if item.endswith("pydistutils.cfg"): - found.remove(item) - found.append(user_filename) - return found - - -dist.Distribution.find_config_files = find_config_files - -# distutils.sysconfig patches: - -old_get_python_inc = sysconfig.get_python_inc - - -def sysconfig_get_python_inc(plat_specific=0, prefix=None): - if prefix is None: - prefix = sys.real_prefix - return old_get_python_inc(plat_specific, prefix) - - -sysconfig_get_python_inc.__doc__ = old_get_python_inc.__doc__ -sysconfig.get_python_inc = sysconfig_get_python_inc - -old_get_python_lib = sysconfig.get_python_lib - - -def sysconfig_get_python_lib(plat_specific=0, standard_lib=0, prefix=None): - if standard_lib and prefix is None: - prefix = sys.real_prefix - return old_get_python_lib(plat_specific, standard_lib, prefix) - - -sysconfig_get_python_lib.__doc__ = old_get_python_lib.__doc__ -sysconfig.get_python_lib = sysconfig_get_python_lib - -old_get_config_vars = sysconfig.get_config_vars - - -def sysconfig_get_config_vars(*args): - real_vars = old_get_config_vars(*args) - if sys.platform == "win32": - lib_dir = os.path.join(sys.real_prefix, "libs") - if isinstance(real_vars, dict) and "LIBDIR" not in real_vars: - real_vars["LIBDIR"] = lib_dir # asked for all - elif isinstance(real_vars, list) and "LIBDIR" in args: - real_vars = real_vars + [lib_dir] # asked for list - return real_vars - - -sysconfig_get_config_vars.__doc__ = old_get_config_vars.__doc__ -sysconfig.get_config_vars = sysconfig_get_config_vars diff --git a/blog-generator/venv/lib/python3.8/distutils/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/distutils/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index b58b677137dabfe5b957afa880cb629202add971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2821 zcma)8&2t;K6$h}(<#PEUO0s0dmSZ}JW78jECb@Jv8P{!`@#JGvPm-n$rVYAWfYh#* zy9^eREzSBQpF8b8(4mgG_Rv2D*PeRmAJ9|ZTT(P5&vXI~un%|-zysdz{lMR~+W~>{ zw?BXT{XaT{{0lp)#fQ#gsKwtYA(BX%5Q(D0 zH}TJ@Wao@Gs*yl7&gnvjc7X!@IXz_BC}-A`&N-zd`&_kVZArkEQKHDKBV9>VL)K(X zkz{S;oV&bx8mMlv&ewlWvMVl88;61ZCnfm%j%4f)1hkuc6TI`%E0Zn0HQDCdl$`qN zDkU&y2j=X+od3+{sJHml#XOc=ll4RPSE}#9Y(Kp|+2uDVc}iqM2Cs+=)QvNT?^e3E zL3a~;+*LQluG&g^$u0hlY|7Rv!f&ZtI3jMT?c`nlp4^me*?C3zZS`LAzPc@-s%`Nu zXz%d5@`_xOUC{Q`UC{PH+Xw9((B9+s<+|K}6(6YkpnCwi2cWwr>DQ#c^>2*azHP|3 zFh?d%i__sZ2dZ}*YjYH)Dm(5iHN9yV9fo7o3r+8K(F>XM&DMJKYOqfN=2E(vWh0$>a$1bL6Y%I$QTc3vJpioomfu+*M zx;S9nB#$%ez)jhvR$(fpT8-itww=Q*E$_;9M{yRW@u?E|6r)nWRl0>rM?Vt11%CZ^ ze{hgb)F4hz!ofH;gG7NdX?`RhK3BscHfk_T^YP#qz%T&U2h$UCkY^w5{bI0;+(3vp zi;WO_(-XZ3i{6D=w4fn0pgwKUF1toguPwdWyX@3{-?hFF8Q@0<8wfGUqA{Ko5X1HA#$6AH^00aXeJfknEp$T9GNMuK{mn?Io^OC`s zGjk14QVAhl^y?r~EsbB&Gx~)5Y3HR=IyVJLlO)ED`Dh}eNBF(`+cW6 zm|h1nyMfm+Rz}Qm2SAH}Cfd_9G@_WQC?3U;z5$k(o!(h;$ffDez_{?BLEk;9`yfT= z+eJZn36-~@Q&PQA!kdNMQ2EQ|{+8?v$VI;oCjZxGNE^^&Qt%e$x(u}xNCQ9LZ?OI& z%wPE3Lci}rKZ3d}7k)p5k>Y!35aNF!D-h?#N!(ct;O!w>0kG>OH9qj$Bk7d%u&y7K z3?k!vjO>TH2Ix5G$f2isNlP}SS7F5kur*#I2fz&r?tS^$Z=QViRX?zs7a>~!_!!=a zIaGZN+bGwQ3eGD)#!zeg=YS7DWb{oC`;K)(JuY~oqBmTH*I_Fp&db4m>!-n9*%(v3 zz&x2FwM#bupIG$=xCg7q86k%xz34o&PCS{;eXLTo=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* -Description-Content-Type: text/x-rst -Requires-Dist: MarkupSafe (>=0.23) -Provides-Extra: i18n -Requires-Dist: Babel (>=0.8) ; extra == 'i18n' - -Jinja -===== - -Jinja is a fast, expressive, extensible templating engine. Special -placeholders in the template allow writing code similar to Python -syntax. Then the template is passed data to render the final document. - -It includes: - -- Template inheritance and inclusion. -- Define and import macros within templates. -- HTML templates can use autoescaping to prevent XSS from untrusted - user input. -- A sandboxed environment can safely render untrusted templates. -- AsyncIO support for generating templates and calling async - functions. -- I18N support with Babel. -- Templates are compiled to optimized Python code just-in-time and - cached, or can be compiled ahead-of-time. -- Exceptions point to the correct line in templates to make debugging - easier. -- Extensible filters, tests, functions, and even syntax. - -Jinja's philosophy is that while application logic belongs in Python if -possible, it shouldn't make the template designer's job difficult by -restricting functionality too much. - - -Installing ----------- - -Install and update using `pip`_: - -.. code-block:: text - - $ pip install -U Jinja2 - -.. _pip: https://pip.pypa.io/en/stable/quickstart/ - - -In A Nutshell -------------- - -.. code-block:: jinja - - {% extends "base.html" %} - {% block title %}Members{% endblock %} - {% block content %} -

- {% endblock %} - - -Links ------ - -- Website: https://palletsprojects.com/p/jinja/ -- Documentation: https://jinja.palletsprojects.com/ -- Releases: https://pypi.org/project/Jinja2/ -- Code: https://github.com/pallets/jinja -- Issue tracker: https://github.com/pallets/jinja/issues -- Test status: https://dev.azure.com/pallets/jinja/_build -- Official chat: https://discord.gg/t6rrQZH - - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/RECORD b/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/RECORD deleted file mode 100644 index 13e7ee4..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/RECORD +++ /dev/null @@ -1,61 +0,0 @@ -Jinja2-2.11.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Jinja2-2.11.1.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 -Jinja2-2.11.1.dist-info/METADATA,sha256=7e9_tz7RirTbxIeiHTSq3e5g6ddCjoym3o5vdlRLuxU,3535 -Jinja2-2.11.1.dist-info/RECORD,, -Jinja2-2.11.1.dist-info/WHEEL,sha256=hq9T7ntHzQqUTLUmJ2UVhPL-W4tJi3Yb2Lh5lMfs2mk,110 -Jinja2-2.11.1.dist-info/entry_points.txt,sha256=Qy_DkVo6Xj_zzOtmErrATe8lHZhOqdjpt3e4JJAGyi8,61 -Jinja2-2.11.1.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 -jinja2/__init__.py,sha256=Nq1rzGErXYjIQnqc1pDCJht5LmInBRIZkeL2qkrYEyI,1549 -jinja2/__pycache__/__init__.cpython-38.pyc,, -jinja2/__pycache__/_compat.cpython-38.pyc,, -jinja2/__pycache__/_identifier.cpython-38.pyc,, -jinja2/__pycache__/asyncfilters.cpython-38.pyc,, -jinja2/__pycache__/asyncsupport.cpython-38.pyc,, -jinja2/__pycache__/bccache.cpython-38.pyc,, -jinja2/__pycache__/compiler.cpython-38.pyc,, -jinja2/__pycache__/constants.cpython-38.pyc,, -jinja2/__pycache__/debug.cpython-38.pyc,, -jinja2/__pycache__/defaults.cpython-38.pyc,, -jinja2/__pycache__/environment.cpython-38.pyc,, -jinja2/__pycache__/exceptions.cpython-38.pyc,, -jinja2/__pycache__/ext.cpython-38.pyc,, -jinja2/__pycache__/filters.cpython-38.pyc,, -jinja2/__pycache__/idtracking.cpython-38.pyc,, -jinja2/__pycache__/lexer.cpython-38.pyc,, -jinja2/__pycache__/loaders.cpython-38.pyc,, -jinja2/__pycache__/meta.cpython-38.pyc,, -jinja2/__pycache__/nativetypes.cpython-38.pyc,, -jinja2/__pycache__/nodes.cpython-38.pyc,, -jinja2/__pycache__/optimizer.cpython-38.pyc,, -jinja2/__pycache__/parser.cpython-38.pyc,, -jinja2/__pycache__/runtime.cpython-38.pyc,, -jinja2/__pycache__/sandbox.cpython-38.pyc,, -jinja2/__pycache__/tests.cpython-38.pyc,, -jinja2/__pycache__/utils.cpython-38.pyc,, -jinja2/__pycache__/visitor.cpython-38.pyc,, -jinja2/_compat.py,sha256=B6Se8HjnXVpzz9-vfHejn-DV2NjaVK-Iewupc5kKlu8,3191 -jinja2/_identifier.py,sha256=EdgGJKi7O1yvr4yFlvqPNEqV6M1qHyQr8Gt8GmVTKVM,1775 -jinja2/asyncfilters.py,sha256=8uwjG1zgHTv3K4nEvsj4HXWkK4NsOlfx7-CcnCULDWw,4185 -jinja2/asyncsupport.py,sha256=ZBFsDLuq3Gtji3Ia87lcyuDbqaHZJRdtShZcqwpFnSQ,7209 -jinja2/bccache.py,sha256=3Pmp4jo65M9FQuIxdxoDBbEDFwe4acDMQf77nEJfrHA,12139 -jinja2/compiler.py,sha256=xCNpF7-xAduODbGKSVEyzU7XZGeLWHZr1cwcZTQob30,66236 -jinja2/constants.py,sha256=RR1sTzNzUmKco6aZicw4JpQpJGCuPuqm1h1YmCNUEFY,1458 -jinja2/debug.py,sha256=UmsW6OxNmbIGvIkwytOyM1NsZB6xJvl_nSz3VgNETUk,8597 -jinja2/defaults.py,sha256=85B6YUUCyWPSdrSeVhcqFVuu_bHUAQXeey--FIwSeVQ,1126 -jinja2/environment.py,sha256=XqCM_GmncAXPm--CxpRPVF6uV_sPKb0Q0jVa7Znry04,50605 -jinja2/exceptions.py,sha256=VjNLawcmf2ODffqVMCQK1cRmvFaUfQWF4u8ouP3QPcE,5425 -jinja2/ext.py,sha256=AtwL5O5enT_L3HR9-oBvhGyUTdGoyaqG_ICtnR_EVd4,26441 -jinja2/filters.py,sha256=4xEq1qfJ7burpHW5GyL6bkGomp0W47jOXg-HG5aLP-Y,41401 -jinja2/idtracking.py,sha256=J3O4VHsrbf3wzwiBc7Cro26kHb6_5kbULeIOzocchIU,9211 -jinja2/lexer.py,sha256=VeGdW_t82Le4H-jLy-hX6UeosLf7ApUq2kuUos8YF4Y,29942 -jinja2/loaders.py,sha256=UUy5ud3lNtGtnn8iorlF9o1FJ6UqZZKMxd0VGnnqMHI,20350 -jinja2/meta.py,sha256=QjyYhfNRD3QCXjBJpiPl9KgkEkGXJbAkCUq4-Ur10EQ,4131 -jinja2/nativetypes.py,sha256=Arb2_3IuM386vWZbGPY7DmxryrXg3WzXAEnaHJNdWa0,3576 -jinja2/nodes.py,sha256=YwErhE9plVWeoxTQPtMwl10wovsyBRY4x9eAVgtP6zg,31071 -jinja2/optimizer.py,sha256=gQLlMYzvQhluhzmAIFA1tXS0cwgWYOjprN-gTRcHVsc,1457 -jinja2/parser.py,sha256=fcfdqePNTNyvosIvczbytVA332qpsURvYnCGcjDHSkA,35660 -jinja2/runtime.py,sha256=94chnK20a1m1t5AaLWeuiTq6L3g3GLs6AxVPfbNXIHE,30582 -jinja2/sandbox.py,sha256=knayyUvXsZ-F0mk15mO2-ehK9gsw04UhB8td-iUOtLc,17127 -jinja2/tests.py,sha256=iO_Y-9Vo60zrVe1lMpSl5sKHqAxe2leZHC08OoZ8K24,4799 -jinja2/utils.py,sha256=26B9HI2lVWaHY8iOnQTJzAcCL4PYOLiA3V79dm3oOSE,22456 -jinja2/visitor.py,sha256=DUHupl0a4PGp7nxRtZFttUzAi1ccxzqc2hzetPYUz8U,3240 diff --git a/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/WHEEL b/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/WHEEL deleted file mode 100644 index 03bcde7..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.34.1) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/entry_points.txt b/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/entry_points.txt deleted file mode 100644 index 3619483..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[babel.extractors] -jinja2 = jinja2.ext:babel_extract [i18n] - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/top_level.txt b/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/top_level.txt deleted file mode 100644 index 7f7afbf..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Jinja2-2.11.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -jinja2 diff --git a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/INSTALLER b/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/LICENSE.md b/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/LICENSE.md deleted file mode 100644 index 2652d97..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/LICENSE.md +++ /dev/null @@ -1,29 +0,0 @@ -Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later) -Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) -Copyright 2004 Manfred Stienstra (the original version) - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of the Python Markdown Project nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/METADATA b/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/METADATA deleted file mode 100644 index b80bb75..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/METADATA +++ /dev/null @@ -1,57 +0,0 @@ -Metadata-Version: 2.1 -Name: Markdown -Version: 3.2.1 -Summary: Python implementation of Markdown. -Home-page: https://Python-Markdown.github.io/ -Author: Manfred Stienstra, Yuri takhteyev and Waylan limberg -Author-email: waylan.limberg@icloud.com -Maintainer: Waylan Limberg -Maintainer-email: waylan.limberg@icloud.com -License: BSD License -Download-URL: http://pypi.python.org/packages/source/M/Markdown/Markdown-3.2.1-py2.py3-none-any.whl -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Communications :: Email :: Filters -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries -Classifier: Topic :: Internet :: WWW/HTTP :: Site Management -Classifier: Topic :: Software Development :: Documentation -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Text Processing :: Filters -Classifier: Topic :: Text Processing :: Markup :: HTML -Requires-Python: >=3.5 -Requires-Dist: setuptools (>=36) -Provides-Extra: testing -Requires-Dist: coverage ; extra == 'testing' -Requires-Dist: pyyaml ; extra == 'testing' - - -This is a Python implementation of John Gruber's Markdown_. -It is almost completely compliant with the reference implementation, -though there are a few known issues. See Features_ for information -on what exactly is supported and what is not. Additional features are -supported by the `Available Extensions`_. - -.. _Markdown: https://daringfireball.net/projects/markdown/ -.. _Features: https://Python-Markdown.github.io#features -.. _`Available Extensions`: https://Python-Markdown.github.io/extensions/ - -Support -======= - -You may report bugs, ask for help, and discuss various other issues on -the `bug tracker`_. - -.. _`bug tracker`: https://github.com/Python-Markdown/markdown/issues - - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/RECORD b/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/RECORD deleted file mode 100644 index 6584405..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/RECORD +++ /dev/null @@ -1,74 +0,0 @@ -../../../bin/markdown_py,sha256=FXxf9g5CXHurRxon-l_zpd6fdN0DvCysE4W0hBw3sBE,251 -Markdown-3.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Markdown-3.2.1.dist-info/LICENSE.md,sha256=bxGTy2NHGOZcOlN9biXr1hSCDsDvaTz8EiSBEmONZNo,1645 -Markdown-3.2.1.dist-info/METADATA,sha256=PK6UzXb9yL09qZJH7SCqZd6-mj8keovCmxQLt89NlEQ,2383 -Markdown-3.2.1.dist-info/RECORD,, -Markdown-3.2.1.dist-info/WHEEL,sha256=h_aVn5OB2IERUjMbi2pucmR_zzWJtk303YXvhh60NJ8,110 -Markdown-3.2.1.dist-info/entry_points.txt,sha256=j4jiKg-iwZGImvi8OzotZePWoFbJJ4GrfzDqH03u3SQ,1103 -Markdown-3.2.1.dist-info/top_level.txt,sha256=IAxs8x618RXoH1uCqeLLxXsDefJvE_mIibr_M4sOlyk,9 -markdown/__init__.py,sha256=002-LuHviYzROW2rg_gBGai81nMouUNO9UFj5nSsTSk,2065 -markdown/__main__.py,sha256=MpVK3zlwQ-4AzDzZmIScPB90PpunMGVgS5KBmJuHYTw,5802 -markdown/__meta__.py,sha256=xhmwLb0Eb6kfiapdM21pCb80lyVEl8hxv8Re_X6wsI0,1837 -markdown/__pycache__/__init__.cpython-38.pyc,, -markdown/__pycache__/__main__.cpython-38.pyc,, -markdown/__pycache__/__meta__.cpython-38.pyc,, -markdown/__pycache__/blockparser.cpython-38.pyc,, -markdown/__pycache__/blockprocessors.cpython-38.pyc,, -markdown/__pycache__/core.cpython-38.pyc,, -markdown/__pycache__/inlinepatterns.cpython-38.pyc,, -markdown/__pycache__/pep562.cpython-38.pyc,, -markdown/__pycache__/postprocessors.cpython-38.pyc,, -markdown/__pycache__/preprocessors.cpython-38.pyc,, -markdown/__pycache__/serializers.cpython-38.pyc,, -markdown/__pycache__/test_tools.cpython-38.pyc,, -markdown/__pycache__/treeprocessors.cpython-38.pyc,, -markdown/__pycache__/util.cpython-38.pyc,, -markdown/blockparser.py,sha256=JpBhOokOoBUGCXolftOc5m1hPcR2y9s9hVd9WSuhHzo,4285 -markdown/blockprocessors.py,sha256=l4gmkAN9b2L340EX0gm24EyWS7UzBviPqX6wYrcgEco,23736 -markdown/core.py,sha256=JLR5hIMwWSeIHRQhTzAymB3QUD3gHCdITFvmuuCpIcA,15360 -markdown/extensions/__init__.py,sha256=6kUSgoqDT4gGUVsqf7F9oQD_jA0RJCbX5EK3JVo8iQE,3517 -markdown/extensions/__pycache__/__init__.cpython-38.pyc,, -markdown/extensions/__pycache__/abbr.cpython-38.pyc,, -markdown/extensions/__pycache__/admonition.cpython-38.pyc,, -markdown/extensions/__pycache__/attr_list.cpython-38.pyc,, -markdown/extensions/__pycache__/codehilite.cpython-38.pyc,, -markdown/extensions/__pycache__/def_list.cpython-38.pyc,, -markdown/extensions/__pycache__/extra.cpython-38.pyc,, -markdown/extensions/__pycache__/fenced_code.cpython-38.pyc,, -markdown/extensions/__pycache__/footnotes.cpython-38.pyc,, -markdown/extensions/__pycache__/legacy_attrs.cpython-38.pyc,, -markdown/extensions/__pycache__/legacy_em.cpython-38.pyc,, -markdown/extensions/__pycache__/md_in_html.cpython-38.pyc,, -markdown/extensions/__pycache__/meta.cpython-38.pyc,, -markdown/extensions/__pycache__/nl2br.cpython-38.pyc,, -markdown/extensions/__pycache__/sane_lists.cpython-38.pyc,, -markdown/extensions/__pycache__/smarty.cpython-38.pyc,, -markdown/extensions/__pycache__/tables.cpython-38.pyc,, -markdown/extensions/__pycache__/toc.cpython-38.pyc,, -markdown/extensions/__pycache__/wikilinks.cpython-38.pyc,, -markdown/extensions/abbr.py,sha256=pqp2HnOR2giT-iYKyqtsp2_eUOWBR0j_hUfjvUV5c88,2916 -markdown/extensions/admonition.py,sha256=HWHHjuYZPAPOg5X8hbpDuSbw8gB6k0odw8GuTT1v_N4,3124 -markdown/extensions/attr_list.py,sha256=m9a1H-S33rV2twtlFYuoxSiCAf22ndU5tziSzNF2dNg,6003 -markdown/extensions/codehilite.py,sha256=rVZVOIjp2KEIZsnz90mX6E2_xnwVPQZpVVQVJMuMVU0,9834 -markdown/extensions/def_list.py,sha256=iqRXAEl2XnyF415afCxihAgOmEUOK1hIuBPIK1k7Tzo,3521 -markdown/extensions/extra.py,sha256=udRN8OvSWcq3UwkPygvsFl1RlCVtCJ-ARVg2IwVH6VY,1831 -markdown/extensions/fenced_code.py,sha256=dww9rDu2kQtkoTpjn9BBgeGCTNdE1bMPJ2wgR6695iM,3897 -markdown/extensions/footnotes.py,sha256=a9sb8RoKqFU8p8ZhpTObrn_Uek0hbyPFVGYpRaEDXaw,15339 -markdown/extensions/legacy_attrs.py,sha256=2EaVQkxQoNnP8_lMPvGRBdNda8L4weUQroiyEuVdS-w,2547 -markdown/extensions/legacy_em.py,sha256=9ZMGCTrFh01eiOpnFjS0jVkqgYXiTzCGn-eNvYcvObg,1579 -markdown/extensions/md_in_html.py,sha256=ohSiGcgR5yBqusuTs0opbTO_5fq442fqPK-klFd_qaM,4040 -markdown/extensions/meta.py,sha256=EUfkzM7l7UpH__Or9K3pl8ldVddwndlCZWA3d712RAE,2331 -markdown/extensions/nl2br.py,sha256=wAqTNOuf2L1NzlEvEqoID70n9y-aiYaGLkuyQk3CD0w,783 -markdown/extensions/sane_lists.py,sha256=ZQmCf-247KBexVG0fc62nDvokGkV6W1uavYbieNKSG4,1505 -markdown/extensions/smarty.py,sha256=0padzkVCNACainKw-Xj1S5UfT0125VCTfNejmrCZItA,10238 -markdown/extensions/tables.py,sha256=bicFx_wqhnEx6Y_8MJqA56rh71pt5fOe94oiWbvcobY,7685 -markdown/extensions/toc.py,sha256=E-d3R4etcM_R2sQyTpKkejRv2NHrHPCvaXK9hUqfK58,13224 -markdown/extensions/wikilinks.py,sha256=GkgT9BY7b1-qW--dIwFAhC9V20RoeF13b7CFdw_V21Q,2812 -markdown/inlinepatterns.py,sha256=EnYq9aU_Hi1gu5e8dcbUxUu0mRz-pHFV79uGQCYbD5I,29378 -markdown/pep562.py,sha256=5UkqT7sb-cQufgbOl_jF-RYUVVHS7VThzlMzR9vrd3I,8917 -markdown/postprocessors.py,sha256=25g6qqpJ4kuiq4RBrGz8RA6GMb7ArUi1AN2VDVnR35U,3738 -markdown/preprocessors.py,sha256=dsmMVPP2afKAZ0s59_mFidM_mCiNfgdBJ9aVDWu_viE,15323 -markdown/serializers.py,sha256=_wQl-iJrPSUEQ4Q1owWYqN9qceVh6TOlAOH_i44BKAQ,6540 -markdown/test_tools.py,sha256=zFHFzmtzjfMRroyyli3LY4SP8yLfLf4S7SsU3z7Z1SQ,6823 -markdown/treeprocessors.py,sha256=NBaYc9TEGP7TBaN6YRROIqE5Lj-AMoAqp0jN-coGW3Q,15401 -markdown/util.py,sha256=0ySktJgYplEV7g6TOOs8fatAS4Fi-6F7iv4D9Vw3g0c,15201 diff --git a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/WHEEL b/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/WHEEL deleted file mode 100644 index 78e6f69..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.33.4) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/entry_points.txt b/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/entry_points.txt deleted file mode 100644 index f49693d..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/entry_points.txt +++ /dev/null @@ -1,23 +0,0 @@ -[console_scripts] -markdown_py = markdown.__main__:run - -[markdown.extensions] -abbr = markdown.extensions.abbr:AbbrExtension -admonition = markdown.extensions.admonition:AdmonitionExtension -attr_list = markdown.extensions.attr_list:AttrListExtension -codehilite = markdown.extensions.codehilite:CodeHiliteExtension -def_list = markdown.extensions.def_list:DefListExtension -extra = markdown.extensions.extra:ExtraExtension -fenced_code = markdown.extensions.fenced_code:FencedCodeExtension -footnotes = markdown.extensions.footnotes:FootnoteExtension -legacy_attrs = markdown.extensions.legacy_attrs:LegacyAttrExtension -legacy_em = markdown.extensions.legacy_em:LegacyEmExtension -md_in_html = markdown.extensions.md_in_html:MarkdownInHtmlExtension -meta = markdown.extensions.meta:MetaExtension -nl2br = markdown.extensions.nl2br:Nl2BrExtension -sane_lists = markdown.extensions.sane_lists:SaneListExtension -smarty = markdown.extensions.smarty:SmartyExtension -tables = markdown.extensions.tables:TableExtension -toc = markdown.extensions.toc:TocExtension -wikilinks = markdown.extensions.wikilinks:WikiLinkExtension - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/top_level.txt b/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/top_level.txt deleted file mode 100644 index 0918c97..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Markdown-3.2.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -markdown diff --git a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER b/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.txt b/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.txt deleted file mode 100644 index 9d227a0..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/LICENSE.txt +++ /dev/null @@ -1,28 +0,0 @@ -Copyright 2010 Pallets - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/METADATA b/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/METADATA deleted file mode 100644 index c50370d..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/METADATA +++ /dev/null @@ -1,105 +0,0 @@ -Metadata-Version: 2.1 -Name: MarkupSafe -Version: 1.1.1 -Summary: Safely add untrusted strings to HTML/XML markup. -Home-page: https://palletsprojects.com/p/markupsafe/ -Author: Armin Ronacher -Author-email: armin.ronacher@active-4.com -Maintainer: The Pallets Team -Maintainer-email: contact@palletsprojects.com -License: BSD-3-Clause -Project-URL: Documentation, https://markupsafe.palletsprojects.com/ -Project-URL: Code, https://github.com/pallets/markupsafe -Project-URL: Issue tracker, https://github.com/pallets/markupsafe/issues -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Text Processing :: Markup :: HTML -Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.* -Description-Content-Type: text/x-rst - -MarkupSafe -========== - -MarkupSafe implements a text object that escapes characters so it is -safe to use in HTML and XML. Characters that have special meanings are -replaced so that they display as the actual characters. This mitigates -injection attacks, meaning untrusted user input can safely be displayed -on a page. - - -Installing ----------- - -Install and update using `pip`_: - -.. code-block:: text - - pip install -U MarkupSafe - -.. _pip: https://pip.pypa.io/en/stable/quickstart/ - - -Examples --------- - -.. code-block:: pycon - - >>> from markupsafe import Markup, escape - >>> # escape replaces special characters and wraps in Markup - >>> escape('') - Markup(u'<script>alert(document.cookie);</script>') - >>> # wrap in Markup to mark text "safe" and prevent escaping - >>> Markup('Hello') - Markup('hello') - >>> escape(Markup('Hello')) - Markup('hello') - >>> # Markup is a text subclass (str on Python 3, unicode on Python 2) - >>> # methods and operators escape their arguments - >>> template = Markup("Hello %s") - >>> template % '"World"' - Markup('Hello "World"') - - -Donate ------- - -The Pallets organization develops and supports MarkupSafe and other -libraries that use it. In order to grow the community of contributors -and users, and allow the maintainers to devote more time to the -projects, `please donate today`_. - -.. _please donate today: https://palletsprojects.com/donate - - -Links ------ - -* Website: https://palletsprojects.com/p/markupsafe/ -* Documentation: https://markupsafe.palletsprojects.com/ -* License: `BSD-3-Clause `_ -* Releases: https://pypi.org/project/MarkupSafe/ -* Code: https://github.com/pallets/markupsafe -* Issue tracker: https://github.com/pallets/markupsafe/issues -* Test status: - - * Linux, Mac: https://travis-ci.org/pallets/markupsafe - * Windows: https://ci.appveyor.com/project/pallets/markupsafe - -* Test coverage: https://codecov.io/gh/pallets/markupsafe -* Official chat: https://discord.gg/t6rrQZH - - diff --git a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/RECORD b/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/RECORD deleted file mode 100644 index 95c3339..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/RECORD +++ /dev/null @@ -1,16 +0,0 @@ -MarkupSafe-1.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -MarkupSafe-1.1.1.dist-info/LICENSE.txt,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 -MarkupSafe-1.1.1.dist-info/METADATA,sha256=IFCP4hCNGjXJgMoSvdjPiKDLAMUTTWoxKXQsQvmyMNU,3653 -MarkupSafe-1.1.1.dist-info/RECORD,, -MarkupSafe-1.1.1.dist-info/WHEEL,sha256=VEyGcIFAmk_1KbI6gaZGw_mMiT-pdGweASQLX-DzYaY,108 -MarkupSafe-1.1.1.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 -markupsafe/__init__.py,sha256=oTblO5f9KFM-pvnq9bB0HgElnqkJyqHnFN1Nx2NIvnY,10126 -markupsafe/__pycache__/__init__.cpython-38.pyc,, -markupsafe/__pycache__/_compat.cpython-38.pyc,, -markupsafe/__pycache__/_constants.cpython-38.pyc,, -markupsafe/__pycache__/_native.cpython-38.pyc,, -markupsafe/_compat.py,sha256=uEW1ybxEjfxIiuTbRRaJpHsPFf4yQUMMKaPgYEC5XbU,558 -markupsafe/_constants.py,sha256=zo2ajfScG-l1Sb_52EP3MlDCqO7Y1BVHUXXKRsVDRNk,4690 -markupsafe/_native.py,sha256=d-8S_zzYt2y512xYcuSxq0NeG2DUUvG80wVdTn-4KI8,1873 -markupsafe/_speedups.c,sha256=k0fzEIK3CP6MmMqeY0ob43TP90mVN0DTyn7BAl3RqSg,9884 -markupsafe/_speedups.cpython-38-x86_64-linux-gnu.so,sha256=SbJwN321Xn7OPYGv5a6Ghzga75uT8RHQUGkoQUASF-o,48016 diff --git a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL b/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL deleted file mode 100644 index ae40efd..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.31.1) -Root-Is-Purelib: false -Tag: cp38-cp38-manylinux1_x86_64 - diff --git a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt b/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt deleted file mode 100644 index 75bf729..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/MarkupSafe-1.1.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -markupsafe diff --git a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/AUTHORS b/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/AUTHORS deleted file mode 100644 index f7a7aca..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/AUTHORS +++ /dev/null @@ -1,228 +0,0 @@ -Pygments is written and maintained by Georg Brandl . - -Major developers are Tim Hatch and Armin Ronacher -. - -Other contributors, listed alphabetically, are: - -* Sam Aaron -- Ioke lexer -* Ali Afshar -- image formatter -* Thomas Aglassinger -- Easytrieve, JCL, Rexx, Transact-SQL and VBScript - lexers -* Muthiah Annamalai -- Ezhil lexer -* Kumar Appaiah -- Debian control lexer -* Andreas Amann -- AppleScript lexer -* Timothy Armstrong -- Dart lexer fixes -* Jeffrey Arnold -- R/S, Rd, BUGS, Jags, and Stan lexers -* Jeremy Ashkenas -- CoffeeScript lexer -* José Joaquín Atria -- Praat lexer -* Stefan Matthias Aust -- Smalltalk lexer -* Lucas Bajolet -- Nit lexer -* Ben Bangert -- Mako lexers -* Max Battcher -- Darcs patch lexer -* Thomas Baruchel -- APL lexer -* Tim Baumann -- (Literate) Agda lexer -* Paul Baumgart, 280 North, Inc. -- Objective-J lexer -* Michael Bayer -- Myghty lexers -* Thomas Beale -- Archetype lexers -* John Benediktsson -- Factor lexer -* Trevor Bergeron -- mIRC formatter -* Vincent Bernat -- LessCSS lexer -* Christopher Bertels -- Fancy lexer -* Sébastien Bigaret -- QVT Operational lexer -* Jarrett Billingsley -- MiniD lexer -* Adam Blinkinsop -- Haskell, Redcode lexers -* Stéphane Blondon -- SGF lexer -* Frits van Bommel -- assembler lexers -* Pierre Bourdon -- bugfixes -* Matthias Bussonnier -- ANSI style handling for terminal-256 formatter -* chebee7i -- Python traceback lexer improvements -* Hiram Chirino -- Scaml and Jade lexers -* Mauricio Caceres -- SAS and Stata lexers. -* Ian Cooper -- VGL lexer -* David Corbett -- Inform, Jasmin, JSGF, Snowball, and TADS 3 lexers -* Leaf Corcoran -- MoonScript lexer -* Christopher Creutzig -- MuPAD lexer -* Daniël W. Crompton -- Pike lexer -* Pete Curry -- bugfixes -* Bryan Davis -- EBNF lexer -* Bruno Deferrari -- Shen lexer -* Giedrius Dubinskas -- HTML formatter improvements -* Owen Durni -- Haxe lexer -* Alexander Dutton, Oxford University Computing Services -- SPARQL lexer -* James Edwards -- Terraform lexer -* Nick Efford -- Python 3 lexer -* Sven Efftinge -- Xtend lexer -* Artem Egorkine -- terminal256 formatter -* Matthew Fernandez -- CAmkES lexer -* Michael Ficarra -- CPSA lexer -* James H. Fisher -- PostScript lexer -* William S. Fulton -- SWIG lexer -* Carlos Galdino -- Elixir and Elixir Console lexers -* Michael Galloy -- IDL lexer -* Naveen Garg -- Autohotkey lexer -* Laurent Gautier -- R/S lexer -* Alex Gaynor -- PyPy log lexer -* Richard Gerkin -- Igor Pro lexer -* Alain Gilbert -- TypeScript lexer -* Alex Gilding -- BlitzBasic lexer -* Bertrand Goetzmann -- Groovy lexer -* Krzysiek Goj -- Scala lexer -* Andrey Golovizin -- BibTeX lexers -* Matt Good -- Genshi, Cheetah lexers -* Michał Górny -- vim modeline support -* Alex Gosse -- TrafficScript lexer -* Patrick Gotthardt -- PHP namespaces support -* Olivier Guibe -- Asymptote lexer -* Phil Hagelberg -- Fennel lexer -* Florian Hahn -- Boogie lexer -* Martin Harriman -- SNOBOL lexer -* Matthew Harrison -- SVG formatter -* Steven Hazel -- Tcl lexer -* Dan Michael Heggø -- Turtle lexer -* Aslak Hellesøy -- Gherkin lexer -* Greg Hendershott -- Racket lexer -* Justin Hendrick -- ParaSail lexer -* Jordi Gutiérrez Hermoso -- Octave lexer -* David Hess, Fish Software, Inc. -- Objective-J lexer -* Varun Hiremath -- Debian control lexer -* Rob Hoelz -- Perl 6 lexer -* Doug Hogan -- Mscgen lexer -* Ben Hollis -- Mason lexer -* Max Horn -- GAP lexer -* Alastair Houghton -- Lexer inheritance facility -* Tim Howard -- BlitzMax lexer -* Dustin Howett -- Logos lexer -* Ivan Inozemtsev -- Fantom lexer -* Hiroaki Itoh -- Shell console rewrite, Lexers for PowerShell session, - MSDOS session, BC, WDiff -* Brian R. Jackson -- Tea lexer -* Christian Jann -- ShellSession lexer -* Dennis Kaarsemaker -- sources.list lexer -* Dmitri Kabak -- Inferno Limbo lexer -* Igor Kalnitsky -- vhdl lexer -* Alexander Kit -- MaskJS lexer -* Pekka Klärck -- Robot Framework lexer -* Gerwin Klein -- Isabelle lexer -* Eric Knibbe -- Lasso lexer -* Stepan Koltsov -- Clay lexer -* Adam Koprowski -- Opa lexer -* Benjamin Kowarsch -- Modula-2 lexer -* Domen Kožar -- Nix lexer -* Oleh Krekel -- Emacs Lisp lexer -* Alexander Kriegisch -- Kconfig and AspectJ lexers -* Marek Kubica -- Scheme lexer -* Jochen Kupperschmidt -- Markdown processor -* Gerd Kurzbach -- Modelica lexer -* Jon Larimer, Google Inc. -- Smali lexer -* Olov Lassus -- Dart lexer -* Matt Layman -- TAP lexer -* Kristian Lyngstøl -- Varnish lexers -* Sylvestre Ledru -- Scilab lexer -* Chee Sing Lee -- Flatline lexer -* Mark Lee -- Vala lexer -* Valentin Lorentz -- C++ lexer improvements -* Ben Mabey -- Gherkin lexer -* Angus MacArthur -- QML lexer -* Louis Mandel -- X10 lexer -* Louis Marchand -- Eiffel lexer -* Simone Margaritelli -- Hybris lexer -* Kirk McDonald -- D lexer -* Gordon McGregor -- SystemVerilog lexer -* Stephen McKamey -- Duel/JBST lexer -* Brian McKenna -- F# lexer -* Charles McLaughlin -- Puppet lexer -* Kurt McKee -- Tera Term macro lexer -* Lukas Meuser -- BBCode formatter, Lua lexer -* Cat Miller -- Pig lexer -* Paul Miller -- LiveScript lexer -* Hong Minhee -- HTTP lexer -* Michael Mior -- Awk lexer -* Bruce Mitchener -- Dylan lexer rewrite -* Reuben Morais -- SourcePawn lexer -* Jon Morton -- Rust lexer -* Paulo Moura -- Logtalk lexer -* Mher Movsisyan -- DTD lexer -* Dejan Muhamedagic -- Crmsh lexer -* Ana Nelson -- Ragel, ANTLR, R console lexers -* Kurt Neufeld -- Markdown lexer -* Nam T. Nguyen -- Monokai style -* Jesper Noehr -- HTML formatter "anchorlinenos" -* Mike Nolta -- Julia lexer -* Jonas Obrist -- BBCode lexer -* Edward O'Callaghan -- Cryptol lexer -* David Oliva -- Rebol lexer -* Pat Pannuto -- nesC lexer -* Jon Parise -- Protocol buffers and Thrift lexers -* Benjamin Peterson -- Test suite refactoring -* Ronny Pfannschmidt -- BBCode lexer -* Dominik Picheta -- Nimrod lexer -* Andrew Pinkham -- RTF Formatter Refactoring -* Clément Prévost -- UrbiScript lexer -* Tanner Prynn -- cmdline -x option and loading lexers from files -* Oleh Prypin -- Crystal lexer (based on Ruby lexer) -* Elias Rabel -- Fortran fixed form lexer -* raichoo -- Idris lexer -* Kashif Rasul -- CUDA lexer -* Nathan Reed -- HLSL lexer -* Justin Reidy -- MXML lexer -* Norman Richards -- JSON lexer -* Corey Richardson -- Rust lexer updates -* Lubomir Rintel -- GoodData MAQL and CL lexers -* Andre Roberge -- Tango style -* Georg Rollinger -- HSAIL lexer -* Michiel Roos -- TypoScript lexer -* Konrad Rudolph -- LaTeX formatter enhancements -* Mario Ruggier -- Evoque lexers -* Miikka Salminen -- Lovelace style, Hexdump lexer, lexer enhancements -* Stou Sandalski -- NumPy, FORTRAN, tcsh and XSLT lexers -* Matteo Sasso -- Common Lisp lexer -* Joe Schafer -- Ada lexer -* Ken Schutte -- Matlab lexers -* René Schwaiger -- Rainbow Dash style -* Sebastian Schweizer -- Whiley lexer -* Tassilo Schweyer -- Io, MOOCode lexers -* Ted Shaw -- AutoIt lexer -* Joerg Sieker -- ABAP lexer -* Robert Simmons -- Standard ML lexer -* Kirill Simonov -- YAML lexer -* Corbin Simpson -- Monte lexer -* Alexander Smishlajev -- Visual FoxPro lexer -* Steve Spigarelli -- XQuery lexer -* Jerome St-Louis -- eC lexer -* Camil Staps -- Clean and NuSMV lexers; Solarized style -* James Strachan -- Kotlin lexer -* Tom Stuart -- Treetop lexer -* Colin Sullivan -- SuperCollider lexer -* Ben Swift -- Extempore lexer -* Edoardo Tenani -- Arduino lexer -* Tiberius Teng -- default style overhaul -* Jeremy Thurgood -- Erlang, Squid config lexers -* Brian Tiffin -- OpenCOBOL lexer -* Bob Tolbert -- Hy lexer -* Matthias Trute -- Forth lexer -* Erick Tryzelaar -- Felix lexer -* Alexander Udalov -- Kotlin lexer improvements -* Thomas Van Doren -- Chapel lexer -* Daniele Varrazzo -- PostgreSQL lexers -* Abe Voelker -- OpenEdge ABL lexer -* Pepijn de Vos -- HTML formatter CTags support -* Matthias Vallentin -- Bro lexer -* Benoît Vinot -- AMPL lexer -* Linh Vu Hong -- RSL lexer -* Nathan Weizenbaum -- Haml and Sass lexers -* Nathan Whetsell -- Csound lexers -* Dietmar Winkler -- Modelica lexer -* Nils Winter -- Smalltalk lexer -* Davy Wybiral -- Clojure lexer -* Whitney Young -- ObjectiveC lexer -* Diego Zamboni -- CFengine3 lexer -* Enrique Zamudio -- Ceylon lexer -* Alex Zimin -- Nemerle lexer -* Rob Zimmerman -- Kal lexer -* Vincent Zurczak -- Roboconf lexer -* Rostyslav Golda -- FloScript lexer -* GitHub, Inc -- DASM16, Augeas, TOML, and Slash lexers -* Simon Garnotel -- FreeFem++ lexer - -Many thanks for all contributions! diff --git a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/INSTALLER b/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/LICENSE b/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/LICENSE deleted file mode 100644 index 13d1c74..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2006-2019 by the respective authors (see AUTHORS file). -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/METADATA b/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/METADATA deleted file mode 100644 index 4214b2f..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/METADATA +++ /dev/null @@ -1,50 +0,0 @@ -Metadata-Version: 2.1 -Name: Pygments -Version: 2.5.2 -Summary: Pygments is a syntax highlighting package written in Python. -Home-page: http://pygments.org/ -Author: Georg Brandl -Author-email: georg@python.org -License: BSD License -Keywords: syntax highlighting -Platform: any -Classifier: License :: OSI Approved :: BSD License -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: End Users/Desktop -Classifier: Intended Audience :: System Administrators -Classifier: Development Status :: 6 - Mature -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Operating System :: OS Independent -Classifier: Topic :: Text Processing :: Filters -Classifier: Topic :: Utilities -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* - - -Pygments -~~~~~~~~ - -Pygments is a syntax highlighting package written in Python. - -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, increasing quality by a fair amount -* support for new languages and formats are added easily -* a number of output formats, presently HTML, LaTeX, RTF, SVG, all image formats that PIL supports and ANSI sequences -* it is usable as a command-line tool and as a library - -:copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS. -:license: BSD, see LICENSE for details. - - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/RECORD b/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/RECORD deleted file mode 100644 index 46a013b..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/RECORD +++ /dev/null @@ -1,451 +0,0 @@ -../../../bin/pygmentize,sha256=XMHS8cXaOIhesyj--ZEeQw_h8HVVbmHMjLyK0d1Vd2I,252 -Pygments-2.5.2.dist-info/AUTHORS,sha256=TF7aH1YpYbhTCI2skOIlbY17LFDFhFe72J0j4s0-A90,8343 -Pygments-2.5.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Pygments-2.5.2.dist-info/LICENSE,sha256=RbiNNEnDeAZZR1i_PEhNnZixKx7MFj9lQx_gf-pgJfA,1331 -Pygments-2.5.2.dist-info/METADATA,sha256=HuyzWPJj16jDq4zqQNVwMkAhLB5d79yjk4Kh2e_WiK8,1975 -Pygments-2.5.2.dist-info/RECORD,, -Pygments-2.5.2.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110 -Pygments-2.5.2.dist-info/entry_points.txt,sha256=NXt9BRDRv6tAfDwqKM0bDHrrxaIt2f1nxH9CwjyjSKc,54 -Pygments-2.5.2.dist-info/top_level.txt,sha256=RjKKqrVIStoebLHdbs0yZ2Lk4rS7cxGguXsLCYvZ2Ak,9 -pygments/__init__.py,sha256=ClnXejMf3_glSTxF1L99Md0Mpf9365Sgrjsq7h3X4ZQ,3163 -pygments/__main__.py,sha256=JV6RSKzbYgMQHLf0nZGzfq1IXxns2iGunsfkY3jxFKo,372 -pygments/__pycache__/__init__.cpython-38.pyc,, -pygments/__pycache__/__main__.cpython-38.pyc,, -pygments/__pycache__/cmdline.cpython-38.pyc,, -pygments/__pycache__/console.cpython-38.pyc,, -pygments/__pycache__/filter.cpython-38.pyc,, -pygments/__pycache__/formatter.cpython-38.pyc,, -pygments/__pycache__/lexer.cpython-38.pyc,, -pygments/__pycache__/modeline.cpython-38.pyc,, -pygments/__pycache__/plugin.cpython-38.pyc,, -pygments/__pycache__/regexopt.cpython-38.pyc,, -pygments/__pycache__/scanner.cpython-38.pyc,, -pygments/__pycache__/sphinxext.cpython-38.pyc,, -pygments/__pycache__/style.cpython-38.pyc,, -pygments/__pycache__/token.cpython-38.pyc,, -pygments/__pycache__/unistring.cpython-38.pyc,, -pygments/__pycache__/util.cpython-38.pyc,, -pygments/cmdline.py,sha256=Sr5RQ7uaxZe7gVGgOgypYUAF5xEcGh2Vvb3HYIX-7UQ,19525 -pygments/console.py,sha256=QF0bQHbGeFRSetc3g5JsmGziVHQqIZCprEwNlZFtiRg,1721 -pygments/filter.py,sha256=83wVChi33J4gW5GV-ooZSHoXWoqzInGBA74DhW239lE,2038 -pygments/filters/__init__.py,sha256=YcsNTHkr2izYgwenZeUKegrjMzFNzF9V-FGDmwtjSV4,11573 -pygments/filters/__pycache__/__init__.cpython-38.pyc,, -pygments/formatter.py,sha256=9ceInaU6dqybrzludvZZoqNEBmBvofYVFa63hFRUrJI,2948 -pygments/formatters/__init__.py,sha256=qUkhNBzgq_1RmRc5v4y22DqDPsMoJuo91rSsr5cV2FM,5128 -pygments/formatters/__pycache__/__init__.cpython-38.pyc,, -pygments/formatters/__pycache__/_mapping.cpython-38.pyc,, -pygments/formatters/__pycache__/bbcode.cpython-38.pyc,, -pygments/formatters/__pycache__/html.cpython-38.pyc,, -pygments/formatters/__pycache__/img.cpython-38.pyc,, -pygments/formatters/__pycache__/irc.cpython-38.pyc,, -pygments/formatters/__pycache__/latex.cpython-38.pyc,, -pygments/formatters/__pycache__/other.cpython-38.pyc,, -pygments/formatters/__pycache__/rtf.cpython-38.pyc,, -pygments/formatters/__pycache__/svg.cpython-38.pyc,, -pygments/formatters/__pycache__/terminal.cpython-38.pyc,, -pygments/formatters/__pycache__/terminal256.cpython-38.pyc,, -pygments/formatters/_mapping.py,sha256=eFk9dOhQeV3W3bvC-8hQomqu0yd_txUFxI-jysNTlMM,6214 -pygments/formatters/bbcode.py,sha256=_K7UzwyT70snOYAiT3UkItbXRwQYVuTHpr1AZtRHL6Y,3314 -pygments/formatters/html.py,sha256=f0WJ1uuFLF0Dp2YalcMN4aq199nCfYnexiFip7FmQVQ,32687 -pygments/formatters/img.py,sha256=2j8uM6BsmF-8nfbNAUZR_Xa2PlVVPEacVSdtVL3VVu0,19838 -pygments/formatters/irc.py,sha256=nU9jSjARuRaZpCuCey7bnRwGTGKeCTEhm_yDDYxzKQ8,5869 -pygments/formatters/latex.py,sha256=GzaZW3aQLWIyx4AFh_9l9UjaTGCL_SXk-KbTKXaS0jI,17758 -pygments/formatters/other.py,sha256=Qfc5OixOxM7YEy0d0NJBT750ukj-uPyhxKtHGTm0Vlc,5140 -pygments/formatters/rtf.py,sha256=z8LTTuEXwx3hpLaG0qeJumZCkUfseLIBsxhZE-0tEKg,5050 -pygments/formatters/svg.py,sha256=TIKW5KJVOtjY1CO4Y9Kqid9w2IFpfkVR3JD1mEujRJY,5840 -pygments/formatters/terminal.py,sha256=XcyogF_qynLMFC10GvUen0tH9AH0zR8q85xil0rlpb0,4997 -pygments/formatters/terminal256.py,sha256=1d9m96FPG0xEaXEqX3j0ABGWUpEjZKxhVGLWk-8sm7o,11068 -pygments/lexer.py,sha256=NG6uRD_EjEdHzZh0IdzC2taAZtIV_PunZwtajy1q8DE,31698 -pygments/lexers/__init__.py,sha256=4b4C0upAO06vSKrssOmTTiIsqSTKJM4RbjprytoNjaA,11385 -pygments/lexers/__pycache__/__init__.cpython-38.pyc,, -pygments/lexers/__pycache__/_asy_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_cl_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_cocoa_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_csound_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_lasso_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_lua_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_mapping.cpython-38.pyc,, -pygments/lexers/__pycache__/_mql_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_openedge_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_php_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_postgres_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_scilab_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_sourcemod_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_stan_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_stata_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_tsql_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_vbscript_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/_vim_builtins.cpython-38.pyc,, -pygments/lexers/__pycache__/actionscript.cpython-38.pyc,, -pygments/lexers/__pycache__/agile.cpython-38.pyc,, -pygments/lexers/__pycache__/algebra.cpython-38.pyc,, -pygments/lexers/__pycache__/ambient.cpython-38.pyc,, -pygments/lexers/__pycache__/ampl.cpython-38.pyc,, -pygments/lexers/__pycache__/apl.cpython-38.pyc,, -pygments/lexers/__pycache__/archetype.cpython-38.pyc,, -pygments/lexers/__pycache__/asm.cpython-38.pyc,, -pygments/lexers/__pycache__/automation.cpython-38.pyc,, -pygments/lexers/__pycache__/basic.cpython-38.pyc,, -pygments/lexers/__pycache__/bibtex.cpython-38.pyc,, -pygments/lexers/__pycache__/boa.cpython-38.pyc,, -pygments/lexers/__pycache__/business.cpython-38.pyc,, -pygments/lexers/__pycache__/c_cpp.cpython-38.pyc,, -pygments/lexers/__pycache__/c_like.cpython-38.pyc,, -pygments/lexers/__pycache__/capnproto.cpython-38.pyc,, -pygments/lexers/__pycache__/chapel.cpython-38.pyc,, -pygments/lexers/__pycache__/clean.cpython-38.pyc,, -pygments/lexers/__pycache__/compiled.cpython-38.pyc,, -pygments/lexers/__pycache__/configs.cpython-38.pyc,, -pygments/lexers/__pycache__/console.cpython-38.pyc,, -pygments/lexers/__pycache__/crystal.cpython-38.pyc,, -pygments/lexers/__pycache__/csound.cpython-38.pyc,, -pygments/lexers/__pycache__/css.cpython-38.pyc,, -pygments/lexers/__pycache__/d.cpython-38.pyc,, -pygments/lexers/__pycache__/dalvik.cpython-38.pyc,, -pygments/lexers/__pycache__/data.cpython-38.pyc,, -pygments/lexers/__pycache__/diff.cpython-38.pyc,, -pygments/lexers/__pycache__/dotnet.cpython-38.pyc,, -pygments/lexers/__pycache__/dsls.cpython-38.pyc,, -pygments/lexers/__pycache__/dylan.cpython-38.pyc,, -pygments/lexers/__pycache__/ecl.cpython-38.pyc,, -pygments/lexers/__pycache__/eiffel.cpython-38.pyc,, -pygments/lexers/__pycache__/elm.cpython-38.pyc,, -pygments/lexers/__pycache__/email.cpython-38.pyc,, -pygments/lexers/__pycache__/erlang.cpython-38.pyc,, -pygments/lexers/__pycache__/esoteric.cpython-38.pyc,, -pygments/lexers/__pycache__/ezhil.cpython-38.pyc,, -pygments/lexers/__pycache__/factor.cpython-38.pyc,, -pygments/lexers/__pycache__/fantom.cpython-38.pyc,, -pygments/lexers/__pycache__/felix.cpython-38.pyc,, -pygments/lexers/__pycache__/floscript.cpython-38.pyc,, -pygments/lexers/__pycache__/forth.cpython-38.pyc,, -pygments/lexers/__pycache__/fortran.cpython-38.pyc,, -pygments/lexers/__pycache__/foxpro.cpython-38.pyc,, -pygments/lexers/__pycache__/freefem.cpython-38.pyc,, -pygments/lexers/__pycache__/functional.cpython-38.pyc,, -pygments/lexers/__pycache__/go.cpython-38.pyc,, -pygments/lexers/__pycache__/grammar_notation.cpython-38.pyc,, -pygments/lexers/__pycache__/graph.cpython-38.pyc,, -pygments/lexers/__pycache__/graphics.cpython-38.pyc,, -pygments/lexers/__pycache__/haskell.cpython-38.pyc,, -pygments/lexers/__pycache__/haxe.cpython-38.pyc,, -pygments/lexers/__pycache__/hdl.cpython-38.pyc,, -pygments/lexers/__pycache__/hexdump.cpython-38.pyc,, -pygments/lexers/__pycache__/html.cpython-38.pyc,, -pygments/lexers/__pycache__/idl.cpython-38.pyc,, -pygments/lexers/__pycache__/igor.cpython-38.pyc,, -pygments/lexers/__pycache__/inferno.cpython-38.pyc,, -pygments/lexers/__pycache__/installers.cpython-38.pyc,, -pygments/lexers/__pycache__/int_fiction.cpython-38.pyc,, -pygments/lexers/__pycache__/iolang.cpython-38.pyc,, -pygments/lexers/__pycache__/j.cpython-38.pyc,, -pygments/lexers/__pycache__/javascript.cpython-38.pyc,, -pygments/lexers/__pycache__/julia.cpython-38.pyc,, -pygments/lexers/__pycache__/jvm.cpython-38.pyc,, -pygments/lexers/__pycache__/lisp.cpython-38.pyc,, -pygments/lexers/__pycache__/make.cpython-38.pyc,, -pygments/lexers/__pycache__/markup.cpython-38.pyc,, -pygments/lexers/__pycache__/math.cpython-38.pyc,, -pygments/lexers/__pycache__/matlab.cpython-38.pyc,, -pygments/lexers/__pycache__/mime.cpython-38.pyc,, -pygments/lexers/__pycache__/ml.cpython-38.pyc,, -pygments/lexers/__pycache__/modeling.cpython-38.pyc,, -pygments/lexers/__pycache__/modula2.cpython-38.pyc,, -pygments/lexers/__pycache__/monte.cpython-38.pyc,, -pygments/lexers/__pycache__/ncl.cpython-38.pyc,, -pygments/lexers/__pycache__/nimrod.cpython-38.pyc,, -pygments/lexers/__pycache__/nit.cpython-38.pyc,, -pygments/lexers/__pycache__/nix.cpython-38.pyc,, -pygments/lexers/__pycache__/oberon.cpython-38.pyc,, -pygments/lexers/__pycache__/objective.cpython-38.pyc,, -pygments/lexers/__pycache__/ooc.cpython-38.pyc,, -pygments/lexers/__pycache__/other.cpython-38.pyc,, -pygments/lexers/__pycache__/parasail.cpython-38.pyc,, -pygments/lexers/__pycache__/parsers.cpython-38.pyc,, -pygments/lexers/__pycache__/pascal.cpython-38.pyc,, -pygments/lexers/__pycache__/pawn.cpython-38.pyc,, -pygments/lexers/__pycache__/perl.cpython-38.pyc,, -pygments/lexers/__pycache__/php.cpython-38.pyc,, -pygments/lexers/__pycache__/pony.cpython-38.pyc,, -pygments/lexers/__pycache__/praat.cpython-38.pyc,, -pygments/lexers/__pycache__/prolog.cpython-38.pyc,, -pygments/lexers/__pycache__/python.cpython-38.pyc,, -pygments/lexers/__pycache__/qvt.cpython-38.pyc,, -pygments/lexers/__pycache__/r.cpython-38.pyc,, -pygments/lexers/__pycache__/rdf.cpython-38.pyc,, -pygments/lexers/__pycache__/rebol.cpython-38.pyc,, -pygments/lexers/__pycache__/resource.cpython-38.pyc,, -pygments/lexers/__pycache__/rnc.cpython-38.pyc,, -pygments/lexers/__pycache__/roboconf.cpython-38.pyc,, -pygments/lexers/__pycache__/robotframework.cpython-38.pyc,, -pygments/lexers/__pycache__/ruby.cpython-38.pyc,, -pygments/lexers/__pycache__/rust.cpython-38.pyc,, -pygments/lexers/__pycache__/sas.cpython-38.pyc,, -pygments/lexers/__pycache__/scdoc.cpython-38.pyc,, -pygments/lexers/__pycache__/scripting.cpython-38.pyc,, -pygments/lexers/__pycache__/sgf.cpython-38.pyc,, -pygments/lexers/__pycache__/shell.cpython-38.pyc,, -pygments/lexers/__pycache__/slash.cpython-38.pyc,, -pygments/lexers/__pycache__/smalltalk.cpython-38.pyc,, -pygments/lexers/__pycache__/smv.cpython-38.pyc,, -pygments/lexers/__pycache__/snobol.cpython-38.pyc,, -pygments/lexers/__pycache__/solidity.cpython-38.pyc,, -pygments/lexers/__pycache__/special.cpython-38.pyc,, -pygments/lexers/__pycache__/sql.cpython-38.pyc,, -pygments/lexers/__pycache__/stata.cpython-38.pyc,, -pygments/lexers/__pycache__/supercollider.cpython-38.pyc,, -pygments/lexers/__pycache__/tcl.cpython-38.pyc,, -pygments/lexers/__pycache__/templates.cpython-38.pyc,, -pygments/lexers/__pycache__/teraterm.cpython-38.pyc,, -pygments/lexers/__pycache__/testing.cpython-38.pyc,, -pygments/lexers/__pycache__/text.cpython-38.pyc,, -pygments/lexers/__pycache__/textedit.cpython-38.pyc,, -pygments/lexers/__pycache__/textfmts.cpython-38.pyc,, -pygments/lexers/__pycache__/theorem.cpython-38.pyc,, -pygments/lexers/__pycache__/trafficscript.cpython-38.pyc,, -pygments/lexers/__pycache__/typoscript.cpython-38.pyc,, -pygments/lexers/__pycache__/unicon.cpython-38.pyc,, -pygments/lexers/__pycache__/urbi.cpython-38.pyc,, -pygments/lexers/__pycache__/varnish.cpython-38.pyc,, -pygments/lexers/__pycache__/verification.cpython-38.pyc,, -pygments/lexers/__pycache__/web.cpython-38.pyc,, -pygments/lexers/__pycache__/webmisc.cpython-38.pyc,, -pygments/lexers/__pycache__/whiley.cpython-38.pyc,, -pygments/lexers/__pycache__/x10.cpython-38.pyc,, -pygments/lexers/__pycache__/xorg.cpython-38.pyc,, -pygments/lexers/__pycache__/zig.cpython-38.pyc,, -pygments/lexers/_asy_builtins.py,sha256=zO_y8v-bp6kjlIwvbmse79qY8P7qAUhoVObaX9Qy3S8,27311 -pygments/lexers/_cl_builtins.py,sha256=x-mRhM6ukZv0pxYtqCq7SlsezhL8L9fpcCQ-gou0Z9w,14018 -pygments/lexers/_cocoa_builtins.py,sha256=xa2yIFoOcQmYuv014JnBMYlHIrEnD1FMWjsYemJyVm0,40001 -pygments/lexers/_csound_builtins.py,sha256=dWlaJZAK66OZO_gsFNJOad9jWF3dp8HWiskIK5jaEag,17504 -pygments/lexers/_lasso_builtins.py,sha256=1jR-3eDhf1CUcPSSEXgbJMymAkQaJqpWIPjYM4rL6Sk,134534 -pygments/lexers/_lua_builtins.py,sha256=PrFIbnBC7CfaRzIjcTEZvl0gsNpbrzE92e1gSNV2YbU,8340 -pygments/lexers/_mapping.py,sha256=aXLeu68ne_gAAboufuMxiqYb1Y07cWQOl22_3HXD6tU,57717 -pygments/lexers/_mql_builtins.py,sha256=MS7566jpdiud7gEa_y4iJpHLkqjpo-7Y8WwB9MyMUhY,24737 -pygments/lexers/_openedge_builtins.py,sha256=hCqbIZd_qcBTlLyQGME8mqijUDCIm5P9HtIsv8JCEG8,48362 -pygments/lexers/_php_builtins.py,sha256=uH5hykXbyM4d6dXqs78WXEYkKwVgEwIwwOP3HXIb5Yw,154429 -pygments/lexers/_postgres_builtins.py,sha256=OI0j7i72gKoNGJomATjK_P00D7cVT6bpPqeeSB4k0aM,11210 -pygments/lexers/_scilab_builtins.py,sha256=5gjuC1Ny-kJzHi1ng-TI4TJKVuIut1oj4J3f2bPdLIk,52405 -pygments/lexers/_sourcemod_builtins.py,sha256=h79SYG76SHCsSk7qXI7ThqIEpHfg04-eQ2y9z4sqCDk,27113 -pygments/lexers/_stan_builtins.py,sha256=BfSr_PiG5QE0-7hUfX4g_jdwugKf1zWtGE2w33FotvA,10481 -pygments/lexers/_stata_builtins.py,sha256=rZ8lopR_vKuDCBeCF9oPf71sHkD6n-tN6T5QpyOVEg4,25228 -pygments/lexers/_tsql_builtins.py,sha256=5qrkZJHk_m1SgTnhCrKp5jXJxexjCaf4GtRkY5_PTEA,15484 -pygments/lexers/_vbscript_builtins.py,sha256=chotaveFeFC-A6qcRAghQC7fAwrDmV-BKE_TW-hrZwk,4249 -pygments/lexers/_vim_builtins.py,sha256=Il_pjrP0PWUjMLCRPOZPoLgd_3jauvv9SGtBOkzmU2A,57090 -pygments/lexers/actionscript.py,sha256=jQTpfKe0OwRQTknMs132_WhqEDIW7lQbLW0HU5D0cOs,11181 -pygments/lexers/agile.py,sha256=0yI_Bq_-ekqFCiMzkcnJfNQ12iyA4QmPk70RCfl1Xa0,900 -pygments/lexers/algebra.py,sha256=vMjSoC9CgSWUMoaNu7gysQDdAc46t_Y6U4dX2mEzNCc,7201 -pygments/lexers/ambient.py,sha256=1_B2JkmFVgGq-JuEhmrXIu-q5WP2e7Ir5DSpO7qXN9E,2557 -pygments/lexers/ampl.py,sha256=HWeNZxYsNhPuGmW1lgNUxMe5zMtbMQ-xNFoj9oVOvq8,4123 -pygments/lexers/apl.py,sha256=gzIuS7p2Qz-pN5M0i45uvDow_gsNNus5k6zrwe19M9c,3174 -pygments/lexers/archetype.py,sha256=luJBCChBsH6fdJOboz5pVTSNCHh7miLd1xtLnI7TH88,11136 -pygments/lexers/asm.py,sha256=kK84-in8Yb41iSVc8pBfTD7_43a0qfLth0gHh4WR5Dg,29855 -pygments/lexers/automation.py,sha256=9oR495kiyEbl-ev7PWF4Mw-jvtuSbOkmKJRmOvUzQb8,19640 -pygments/lexers/basic.py,sha256=siXk3fQfTEfJNeSW2sI-rfssoUpyj7drMdMrs5csYrs,27576 -pygments/lexers/bibtex.py,sha256=fxbIyhfV1yrFfd7oyAp-fyss27T0Bfv8VqRdVnLg63Y,4725 -pygments/lexers/boa.py,sha256=OB_W242mpr2vwbhg0MO4BpZcdhjaXuM6ffQ54zn3-ZI,3942 -pygments/lexers/business.py,sha256=VXved88PH_Lg05WCN_Mb2bxXclZX6IYdE3KXZVXtUZI,27665 -pygments/lexers/c_cpp.py,sha256=6K3X-vogKt3KURQdKT_1X64CvdAn6vFJQvFVYfD9MMg,10512 -pygments/lexers/c_like.py,sha256=UusXq2S5d0v0CpGsxkmVludmu58WsLZQHWnsb0YwhK4,25080 -pygments/lexers/capnproto.py,sha256=pC3zXFSfYFHEIBq3OqLPGKl71K5HtdWnAEqMz6n8KFY,2194 -pygments/lexers/chapel.py,sha256=VBTixkCdwOebIKTdW0oxTAlS2zE99EYUGN5hiCdnGeA,3824 -pygments/lexers/clean.py,sha256=XG0_2KVyxbRFp-_U5HgT1wN9srL522kOe_9T51HeQmA,6362 -pygments/lexers/compiled.py,sha256=iGwVkCJ-SXoovHegOBSnOG518hHkDudegb9_qS-8vW0,1385 -pygments/lexers/configs.py,sha256=v2YS0XcHucKi1yE1S1O5-yIOj3Oy-sX3Hqp0DhKX-6o,32135 -pygments/lexers/console.py,sha256=tj_ARAplXlqt2sGb2ycxsOy8xIL4NCAMOd3bZ0Zjojg,4120 -pygments/lexers/crystal.py,sha256=hTz20yWrjuam9JVG9Xxr6I7x50M_sIlfdBs0_gg5hKQ,16845 -pygments/lexers/csound.py,sha256=G4pXcEj6n1y49HMuB-XSljtzOf2zv2QyuQuXDqmVeTo,16739 -pygments/lexers/css.py,sha256=GFWC8OBDKDkICn2bRXH2ZmpExGFwV3Hc5jfxEQELyeg,31509 -pygments/lexers/d.py,sha256=E_Gj-5pLeC3V6gUzJteVH7JqZEghad9iup19PT9am4k,9530 -pygments/lexers/dalvik.py,sha256=tAoPPa_iRXhWG_MzslSvBE99NlGnkx0WKnwdDQ3XU9o,4420 -pygments/lexers/data.py,sha256=bp8iRknsEocR3BGye9-uNC3YRqh6yXmE0qIw4nnKAMw,19056 -pygments/lexers/diff.py,sha256=8jKEVtSA2YKprutpONqFvMKBhK1U_IFdxaScTuRNeU4,4873 -pygments/lexers/dotnet.py,sha256=Itf0sbtWeooWcI9eBYNtcEXkr0i3qCmWS3GAX_7VSVI,27599 -pygments/lexers/dsls.py,sha256=wZJNJpyqbmcqGu8pkLKgsYV7RYbnj81e5Zv_5scPqls,35836 -pygments/lexers/dylan.py,sha256=LkWTiLsU561_VQL-PUirryEt7ewbseLRJfN-H1twmiA,10402 -pygments/lexers/ecl.py,sha256=5ivxyk5lzMottCuIxyE7DBvWYJV5KTuaHNRkvOtgM7c,5875 -pygments/lexers/eiffel.py,sha256=He2DwoUqWqMt8_PDzoP3NuBl9AZ9K3_SmpGkIgSzWuI,2482 -pygments/lexers/elm.py,sha256=91CM_h3PPoBLLm2stJqNZi3lgjhZH7NvzNKWdXAe8CA,2997 -pygments/lexers/email.py,sha256=ap9imSi6jbbP7gPBAyc3rcNurVDSNmRKIWv0ByR6VOQ,5207 -pygments/lexers/erlang.py,sha256=cV4ibgUrR9iiHJFH0nfzTTkseM-F2b71mljP3lE91Uo,18976 -pygments/lexers/esoteric.py,sha256=I7YEPnQdftxEOasCec8_dxVr7zgypMtoYtds0v2srNQ,9489 -pygments/lexers/ezhil.py,sha256=R26b4iXSpdMkgXewJN2INhJXL0ICXhW2o9fu3bn078U,3020 -pygments/lexers/factor.py,sha256=nBYhJoNLkSxtshGrF08tSQKUq_TtgVp1ukKX4Zromm8,17864 -pygments/lexers/fantom.py,sha256=3OTJDka8qeNRykM1Ki1Lyek6gd-jqOa-l5IgRbX8kSg,9982 -pygments/lexers/felix.py,sha256=DoSGdEntZgG3JUbeBA9fqUtg3lODbqwY3_XS6EIfXt4,9408 -pygments/lexers/floscript.py,sha256=eza4Rw3RI3mFjIIAA2czmi2SlgbcSI1T8pNr7vUd0eY,2667 -pygments/lexers/forth.py,sha256=Yqm9z-PjymjQjaleCW-SNJdCCc_NWeFXMz_XvjtAStI,7179 -pygments/lexers/fortran.py,sha256=XqwbZg25atjNDN8yUnqkxm1nfqbzSgZDqmKUIFNQSHk,9841 -pygments/lexers/foxpro.py,sha256=i1B6wX4U5oY8FJO5BGtTR0RaVWbO6P45PXxndi5HcpE,26236 -pygments/lexers/freefem.py,sha256=bYEPIZ1mysE2Ub9WO8NPHefz-CaGqPiE0WbHZeMHPsQ,27086 -pygments/lexers/functional.py,sha256=gJqzgp1ujTa8Zk5hjzXdutz8vvSJpRxhqTVCkK03Ij0,698 -pygments/lexers/go.py,sha256=aRdc0lsKbF7xxTcUnu35m-_e3SD7s2eBAllq1y7_qY8,3701 -pygments/lexers/grammar_notation.py,sha256=j_289Tqa4umdEu8F5JzjvWPNiGcs-nkOB0TVWNyMo0E,6329 -pygments/lexers/graph.py,sha256=v013Gzn_RIuLrEz_DJuUah_vCpv6aVSMZpHGov19BMY,2756 -pygments/lexers/graphics.py,sha256=xfr7jZ_JF81kh-RFxIFSKOa06W4z0YxWzOxXAmrLwMA,38259 -pygments/lexers/haskell.py,sha256=2DwahPHxii04ZtduqmZYRCR5y8VRsPFtI6y7rMeUr0I,32072 -pygments/lexers/haxe.py,sha256=uWeORmR1BBCtA_HKRJIhzl26GfkzxzVd7c8or-REw7s,30959 -pygments/lexers/hdl.py,sha256=Xpf_1SJ-Uwf94J6MK_C5wR7JyXQkDKtlNdJ7MLL6uzs,18179 -pygments/lexers/hexdump.py,sha256=7y6XhpOGaVfbtWPSzFxgen8u4sr9sWCbnRUTmvnW1KI,3507 -pygments/lexers/html.py,sha256=B-XSH62dR1GZSJ6E3rDOoF6WO-FcKAnrCqTYvvm8jow,19280 -pygments/lexers/idl.py,sha256=hg7CnizaVt7br6ydWkt4VU9UMNax7gg4ToA3_rnqM1M,14986 -pygments/lexers/igor.py,sha256=FP_3Uz06p1emRB1BqpJ_11KY5k38D5nBLP9nFLnXsHA,30917 -pygments/lexers/inferno.py,sha256=iB07whrTd_qnsABOUalv999QhFYB2nhIHfTp_ECsTxM,3117 -pygments/lexers/installers.py,sha256=QVPOqFLmDydPhBJYmQcyjq6XQvcPb1Hxhpbv5JvgL-M,12866 -pygments/lexers/int_fiction.py,sha256=-jBktm0onIUz_hzsP0lUd3g9aLXJ4KLls0gjIwSB46o,55779 -pygments/lexers/iolang.py,sha256=Sv9qzhNgvVz1xmStZOLm3KTvlcI2A1zywAWQTo6ahs0,1905 -pygments/lexers/j.py,sha256=2wqBgvkxF99yBTdyslEsaeweZuqNO_yNZPjTKRwNTdo,4527 -pygments/lexers/javascript.py,sha256=7FV6hoTtWwOXIZGGb_9NBq5RrkDlPi9qpOzhHMioW3Q,60240 -pygments/lexers/julia.py,sha256=ObRU-RjNe_N6zcQZgq5nws526X_j_4c4KPUFwwROFns,14179 -pygments/lexers/jvm.py,sha256=Qsg2PugXHCD55g_w4GVI4FDFCfOBICYW70xKhWMfNiQ,70347 -pygments/lexers/lisp.py,sha256=oUWEXl8czd_ovmKgkROzATeDjy01jPXAne18zXtEYRY,143609 -pygments/lexers/make.py,sha256=dbnhkZWxESvkvV69TrQEZYdo4yiUGoBBIE-VpXX1uBM,7326 -pygments/lexers/markup.py,sha256=6ACdRUnjI6CGRwes8szHfUjZU-nR7C42y2dbP5EdJeI,20704 -pygments/lexers/math.py,sha256=74YS-Z0zpBP6JYk1fsauYbW7XeZ-XPDTqKakbkX0v1Y,700 -pygments/lexers/matlab.py,sha256=0BTRjVCE7WZsmdbt92Ln2WIlLMtsr-tbBbedt2Y5WHE,30344 -pygments/lexers/mime.py,sha256=hf-dShZ8AUSIzTELUEnlel7gnZLZpiOd-OFehEDSba0,7975 -pygments/lexers/ml.py,sha256=TfNYvefb7-eBlI6yimjd8uT3lTiN_4gERhpmRe6zmBA,27877 -pygments/lexers/modeling.py,sha256=n4gorBPf3gttlsITHGYeOnrUjUWz3nCh5oLYkDMOnrM,13409 -pygments/lexers/modula2.py,sha256=zenAwJk17hVa1FnOTZHJAwLrDrmcurxu4yw7pUoa_Qk,52561 -pygments/lexers/monte.py,sha256=tIn0lsLdG0iHRX_01KI9OkR4iazyiV5F8H3OlkKdFZQ,6307 -pygments/lexers/ncl.py,sha256=0U8xDdO0guIlnQKCHKmKQPXv91Jqy1YvrkNoMonaYp4,63986 -pygments/lexers/nimrod.py,sha256=ERUF4NVMUlbirF_FvN8EIXXFRv6RJqchq4rr9vugHPI,5174 -pygments/lexers/nit.py,sha256=FSQCdLNjKUrw_pisiCH-m15EQcz30lv6wvvbTgkrB-Y,2743 -pygments/lexers/nix.py,sha256=RTgXFxL2niA9iG1zLHRWdNZy70he_vE1D0-FcoU1cfw,4031 -pygments/lexers/oberon.py,sha256=HMOnehgSbLaTV6l1e5b44aZttyE2YIfA2hzyj6MW5xU,3733 -pygments/lexers/objective.py,sha256=FA7gniip1eEDC9x1UIvdI8flRtFxehTHId0MlqB0llo,22789 -pygments/lexers/ooc.py,sha256=lP6KSoWFrq9Q7w5F_aRSaLYUryh4nuBcPfnUkwyBQsU,2999 -pygments/lexers/other.py,sha256=0xuOYQ0uI9eLONFTNBv2e-hltZhQcN531NVi7e2AcQQ,1768 -pygments/lexers/parasail.py,sha256=YEgpP3B62qHYOBFcoChOfgzATczrSPj1WyovIgqW3gg,2737 -pygments/lexers/parsers.py,sha256=fhTyqwzifEpFFfW8emQ9WYYBwlUs48Sv_qykCUQoWHE,27590 -pygments/lexers/pascal.py,sha256=MYqLrHPEpuJLp1uNN19MaNiW-L-FboQapFSTvSkHS5I,32621 -pygments/lexers/pawn.py,sha256=LN0m73AC00wHyvBlbTPU1k2ihBdmDkfIFq24uAWvsF0,8021 -pygments/lexers/perl.py,sha256=1i-mPqF6GxGcX28bW4VlJBpvpZn8FQqWRDjYHQj1-xo,32012 -pygments/lexers/php.py,sha256=OMO2MWHUIyc_zNDUQDajj1SJ1KDI4PBdtIwetBQgRe8,10821 -pygments/lexers/pony.py,sha256=h6S-MGKN7q7sk869oWjC1OcgV7zwXloYnGFshhTFxHk,3269 -pygments/lexers/praat.py,sha256=aFOD7K8wEVjcr4Jb3DAGn5AmjhMDSHY8pVC4WQfjGlc,12292 -pygments/lexers/prolog.py,sha256=TNj3F1ossufZ_XKVVrWJlRtPDRU1ExGO6NS0-TBq7gw,12405 -pygments/lexers/python.py,sha256=iMEg6aTP-NOg_UCDzEGYfTNGin5YTVvOE5AtAfruKdI,47399 -pygments/lexers/qvt.py,sha256=_lXPT5SdDEqhCmuq4TcO9JRrP703kIT3a1Y_ZW9NTCY,6097 -pygments/lexers/r.py,sha256=7oJ0Ihq6qdhgdzpKayeC-MciEKm6PWW3UWJIYnIK_iA,6279 -pygments/lexers/rdf.py,sha256=RAerwJHNjrtXXtua4UXRfUQkMQ36uqfQZlSj63yoQA8,14608 -pygments/lexers/rebol.py,sha256=3bhOFMMneP38O9aJFjPZlNTS6cwbcnDlJaDbfvF4x1g,18624 -pygments/lexers/resource.py,sha256=xbAErtO3-d4LQJJPnLfhD7Kxz_NVQp4WiYrFu52UX-o,2926 -pygments/lexers/rnc.py,sha256=OxpGllFDAM6Vn_alGiaEKMzQDoqRCrl82ocOO4s6L_k,1990 -pygments/lexers/roboconf.py,sha256=9eZkX5xkajimTV1F5wr0Y8QHPfuEB659Lde8H5AzFfM,2070 -pygments/lexers/robotframework.py,sha256=KvbCkzDdowczT0UzGW0y-k7_FRKab21j6G_DOR3E0_0,18736 -pygments/lexers/ruby.py,sha256=rqBelW7OJZIP-J3MVPgQzhXTh3Ey41MjMmpbGQDv390,22168 -pygments/lexers/rust.py,sha256=hRhrSZiiLNlmQrWT2jEQSX6vCPgPe4AkMAW8GBx_FeQ,7738 -pygments/lexers/sas.py,sha256=guELd_4GLI1fhZr3Sxtn80Gt6s6ViYFf4jWnK23zzDc,9449 -pygments/lexers/scdoc.py,sha256=raoQeCR0E6sjvT56Lar0Wxc_1u6fB-gFjptjT0jE56g,1983 -pygments/lexers/scripting.py,sha256=lc9oDOpkwKA9nUcHJ3x2XXs94I-UsaiEi4p9U_C58M8,67764 -pygments/lexers/sgf.py,sha256=R5Zqd5oVOyUd-NewEXMmACaEO5RX_F7eYUZaJXGTY4g,2024 -pygments/lexers/shell.py,sha256=00dGjndFJ6ZWZzsfKW3nKjIKG-CBwTHH-VYQQs57700,33870 -pygments/lexers/slash.py,sha256=WN2f0VirklPe6djATJtbNMkFGRiuIykKZjqG19Rlgk8,8522 -pygments/lexers/smalltalk.py,sha256=xwRETRB2O_cKHZU9w18QXZpiz87WOw0lULDhMxc9xnA,7215 -pygments/lexers/smv.py,sha256=mWuqz0uYpiQLOU4INlxjfrfslOC1yp1BQM8Ule3gqWw,2802 -pygments/lexers/snobol.py,sha256=YFOOuPk4yBxg6stlIm6R3UiUgzkMjz06ac7dW3LRxNk,2756 -pygments/lexers/solidity.py,sha256=fW_aQc_HyRawyStUxllYhUn-NYJPCqzDH-ABWTeKcOI,3255 -pygments/lexers/special.py,sha256=hsAaqgRPHCANQNydjQfEhvE8mmlzxf-N7UMwHI8VC14,3152 -pygments/lexers/sql.py,sha256=50ufavADPsy9MMEJt3e9KpNRcIE6756lI0GI9-I5CEM,31782 -pygments/lexers/stata.py,sha256=9IjM-8_OSSY7_7Fdq1QlNEqeo1KZx5G7_N9NL46jnF4,6457 -pygments/lexers/supercollider.py,sha256=llVW-HUi7m4MNGy4wEp8bF2BJGTXdwF0oNfJfJ_sI8M,3516 -pygments/lexers/tcl.py,sha256=ORf0CBXHwC2MFBpZpcK2sPBCCTyJ3rcwcYOIhN9s0AI,5398 -pygments/lexers/templates.py,sha256=3L_BF-4A1tPZYJoEI3mBtQc4qkL9IM2GdFWl4A88vrs,73561 -pygments/lexers/teraterm.py,sha256=2DdFVGyKIF85efcB5QdqqQQNGjqRHoWzVc5psdhSD7c,6310 -pygments/lexers/testing.py,sha256=Ci9pU2zhD_unhXRoiMlaCzjga2XY1ecvIrp04-wvdfA,10752 -pygments/lexers/text.py,sha256=7cwhjV2GwLRH0CPjlOb7PLVa6XEiRQhDNFU1VO3KNjE,1030 -pygments/lexers/textedit.py,sha256=7F9f0-pAsorZpaFalHOZz5124fsdHCLTAWX_YuwA9XE,6092 -pygments/lexers/textfmts.py,sha256=_H9Ug-E7GKEXHl8TEyJ-bDyBROuAi9BhzF5AEtfgdQ4,13778 -pygments/lexers/theorem.py,sha256=83_RPTNc88LYm96E9SzNu_zv9--KsUaB3RafbYhIZnw,18902 -pygments/lexers/trafficscript.py,sha256=BYTyTAlD4oDVZ9D1aRrmy4zIC4VJ_n2Lgkgq92DxeJM,1546 -pygments/lexers/typoscript.py,sha256=Leb81-51KKuK9FHoo1xKWJGPqTIsyVoeZkGcsK5tQzU,8224 -pygments/lexers/unicon.py,sha256=xo0E3hnBW0gbdszL6n96Cdzume3l1DI7scgkIQ8koaw,18001 -pygments/lexers/urbi.py,sha256=Zq3PCTC-KI7QYuLZ7NSdikm9-MrAhrYH9DGXVSTT89I,5750 -pygments/lexers/varnish.py,sha256=Y2t_JY7uVz6pH3UvlpIvuaxurH4gRiQrP4Esqw5jPnk,7265 -pygments/lexers/verification.py,sha256=qk9xhUQDcD2jPT0k9bQlo_5eKM3UmL7RCiXceYFUF8U,3705 -pygments/lexers/web.py,sha256=4thoq-m_kGixnDR2baWwN5eEqpFAeH3aRaOMK4J_GOE,918 -pygments/lexers/webmisc.py,sha256=ATqDw_kIhr8uc-hQTKJphKewrNXyXp2YjrRDtI9vfqc,39909 -pygments/lexers/whiley.py,sha256=J9ZuO8Yv9DYl9Mb6IHyZz2zguGxZXBKxTSwDcxaii8o,4012 -pygments/lexers/x10.py,sha256=Lu35QT0l-objbi6mCm-rxZU_7gO1rZQhjA6JnZ-EBRI,1965 -pygments/lexers/xorg.py,sha256=FDN0czbxMD6YDOqwL6ltspElwMoxxNVKW11OL--keQY,887 -pygments/lexers/zig.py,sha256=C3kbdZ_rJUb0hMK61UiFsjzJVvC_QIPJZ6glZDNPi78,4147 -pygments/modeline.py,sha256=ctgJHLjLF23gklYyo7Nz6P3I3Z8ArewlT5R2n2KNatQ,1010 -pygments/plugin.py,sha256=QFSBZcOqSJqAVQnydwDg8_LG7GzkxUgWjb0FzqoQHEM,1734 -pygments/regexopt.py,sha256=yMZBB3DRudP4AjPGAUpIF__o_NWOK4HrNfFV6h04V1w,3094 -pygments/scanner.py,sha256=_QI5jZlo4UoyY0B572ZHqWOvVLJTh9jIq31-iZr-EPs,3123 -pygments/sphinxext.py,sha256=eKh9KmLPgBj1kqPr-pduvPPDt3IEyNt4eloXgVM38Tc,4657 -pygments/style.py,sha256=U2hO7Cw7EogLs6IVxj1VprqlICAEh90B3Ayf6kTAATI,5758 -pygments/styles/__init__.py,sha256=TBRYkROPEACN-kE1nQ1ygrhU4efWVShENqI6aqjk5cE,2894 -pygments/styles/__pycache__/__init__.cpython-38.pyc,, -pygments/styles/__pycache__/abap.cpython-38.pyc,, -pygments/styles/__pycache__/algol.cpython-38.pyc,, -pygments/styles/__pycache__/algol_nu.cpython-38.pyc,, -pygments/styles/__pycache__/arduino.cpython-38.pyc,, -pygments/styles/__pycache__/autumn.cpython-38.pyc,, -pygments/styles/__pycache__/borland.cpython-38.pyc,, -pygments/styles/__pycache__/bw.cpython-38.pyc,, -pygments/styles/__pycache__/colorful.cpython-38.pyc,, -pygments/styles/__pycache__/default.cpython-38.pyc,, -pygments/styles/__pycache__/emacs.cpython-38.pyc,, -pygments/styles/__pycache__/friendly.cpython-38.pyc,, -pygments/styles/__pycache__/fruity.cpython-38.pyc,, -pygments/styles/__pycache__/igor.cpython-38.pyc,, -pygments/styles/__pycache__/inkpot.cpython-38.pyc,, -pygments/styles/__pycache__/lovelace.cpython-38.pyc,, -pygments/styles/__pycache__/manni.cpython-38.pyc,, -pygments/styles/__pycache__/monokai.cpython-38.pyc,, -pygments/styles/__pycache__/murphy.cpython-38.pyc,, -pygments/styles/__pycache__/native.cpython-38.pyc,, -pygments/styles/__pycache__/paraiso_dark.cpython-38.pyc,, -pygments/styles/__pycache__/paraiso_light.cpython-38.pyc,, -pygments/styles/__pycache__/pastie.cpython-38.pyc,, -pygments/styles/__pycache__/perldoc.cpython-38.pyc,, -pygments/styles/__pycache__/rainbow_dash.cpython-38.pyc,, -pygments/styles/__pycache__/rrt.cpython-38.pyc,, -pygments/styles/__pycache__/sas.cpython-38.pyc,, -pygments/styles/__pycache__/solarized.cpython-38.pyc,, -pygments/styles/__pycache__/stata_dark.cpython-38.pyc,, -pygments/styles/__pycache__/stata_light.cpython-38.pyc,, -pygments/styles/__pycache__/tango.cpython-38.pyc,, -pygments/styles/__pycache__/trac.cpython-38.pyc,, -pygments/styles/__pycache__/vim.cpython-38.pyc,, -pygments/styles/__pycache__/vs.cpython-38.pyc,, -pygments/styles/__pycache__/xcode.cpython-38.pyc,, -pygments/styles/abap.py,sha256=weNa2ATjBDbWN-EJp36KuapOv_161OYudM6ilzp_5tU,751 -pygments/styles/algol.py,sha256=aVMDywxJ1VRTQ-eYd7CZVQ1BFIWehw2G9OcGg5KmfFI,2263 -pygments/styles/algol_nu.py,sha256=xgZhMlsdR8RppCyaGliUKBWVvianjxt5KrIcWCJDVMM,2278 -pygments/styles/arduino.py,sha256=MtP75GT5SqaAX2PfaC116iPETAPOaD6re6cZ1d9xehQ,4492 -pygments/styles/autumn.py,sha256=setTunOOFJAmdVHab3wmv5OkZmjP6-NVoZjMAyQ2rYY,2144 -pygments/styles/borland.py,sha256=UOFktPmmU_TK6prVMETvVm6FhT01oqsd9_HcG1NZq_Y,1562 -pygments/styles/bw.py,sha256=t0kQytwvh_0SMBcOcmM5foPcc3JWiSd8VWBIXkoP17s,1355 -pygments/styles/colorful.py,sha256=NV-MuEX61J0HH1M0dmurc0RNinp5eA9qIHTjhZ3M6ek,2778 -pygments/styles/default.py,sha256=j124bQ-0TFJaQ2U3ZICWq8_KUOQdjUSxFVknFcpSF40,2532 -pygments/styles/emacs.py,sha256=zNGOC_fHnCZxVphHkieHr7f-zxKkSg_PrFEwWGfQw2U,2486 -pygments/styles/friendly.py,sha256=55qszHEliWiT8h1dW5GjnEA47CpXpJ0BX0C-x6EmZsQ,2515 -pygments/styles/fruity.py,sha256=zkSwyKzmWDs9Jtzgq3rG4DathCH6Pq2JVLuUW8auKXI,1298 -pygments/styles/igor.py,sha256=6GFYt43btx70XZoVDSAqljc1G7UJb6_r9euz0b5nWpY,739 -pygments/styles/inkpot.py,sha256=ecGBxZQw0UhueDHZA06wvgWizu2JzXg9YkYCoLYJuh4,2347 -pygments/styles/lovelace.py,sha256=PBObIz9_gAjMJ8YgNrm-_z2P_wG7moQ1BosKLThJl20,3173 -pygments/styles/manni.py,sha256=EmN6YSp-U-ccxqLqjfnIPg-qkIhUAlSb78tIBvwFCsA,2374 -pygments/styles/monokai.py,sha256=hT5jhhqRQoOmjdK1lZ56hspKke4UDCCiUc3B8m5osLY,5086 -pygments/styles/murphy.py,sha256=ppT--IJLWtcbxKCNRBuusP4zdSmbR8YShosCdd3hpXs,2751 -pygments/styles/native.py,sha256=xkphXXv8PvfbgawNSTR28LcEe1TQxFtdrk_sQcGeo2E,1938 -pygments/styles/paraiso_dark.py,sha256=3a4BSgZQMfB8E2bUMi1WAWkDr98oFUfaPygcsl9B9ZM,5641 -pygments/styles/paraiso_light.py,sha256=QsZyh5oPQb6wYgnoQAkH2MRBkJjRPqAu5De77diOeN8,5645 -pygments/styles/pastie.py,sha256=duELGPs_LEzLbesA39vu0MzxtwkPJ2wnV2rS_clTu2E,2473 -pygments/styles/perldoc.py,sha256=Wf54Io76npBZEsVt8HuM-x7mpzJ7iwPgj5PP_hOf91w,2175 -pygments/styles/rainbow_dash.py,sha256=IlLrIcl76wy4aIiZIRWxMzUILOI9ms7YEX0o6UL9ROc,2480 -pygments/styles/rrt.py,sha256=xQp_B5sDo4BJ4Mzx4PWVK6AW_pZs_XmIoM8zLwpfVTs,852 -pygments/styles/sas.py,sha256=jC6iVFl7-xp0MKwFkPM9QbEInzxVlnhsluPR69iqMZE,1441 -pygments/styles/solarized.py,sha256=f_E9bd-THUcJUJR36hQgbu9BVIjLi6yiI_n07oRu2u4,3747 -pygments/styles/stata_dark.py,sha256=K1AKYh93Jd9E_eWXhDw7-tM6fJbIuFeJcAR5jVE1Nkc,1245 -pygments/styles/stata_light.py,sha256=cN0ulhqteDqKkGnOqAL1aNHy3AvYbmu-fS35XaMptKM,1274 -pygments/styles/tango.py,sha256=1VtAeshYeFh4jWITdb5_wf-7avl1DwtGWrQkvSKqJJo,7096 -pygments/styles/trac.py,sha256=wWJokrY8EWWxJTChPxxYsH_cB-CNN7coa1ZBihzbiG4,1933 -pygments/styles/vim.py,sha256=9PtHne1K4TmKIFcPoM4NY_HRV3naKXRIeEvMC437t7U,1976 -pygments/styles/vs.py,sha256=-mK8_RJJk12gbR-TXP1zedQpflKS2zc9xQQzHbZTB1E,1073 -pygments/styles/xcode.py,sha256=s3NuWSoZ8dRCuU0PU0-aDop4xqgAXP4rVefg5yFgQVg,1501 -pygments/token.py,sha256=J1LOX6vjhiN3pTShN9Mj0MfbWPzhypuPQYZuw29E8As,6167 -pygments/unistring.py,sha256=aQZ1Bo7UJKKhGsEIchluK5tpq7F9tjfp-AAyCvvNQKE,64749 -pygments/util.py,sha256=uNlo3O-lYReb1XXrPFOrGAfKLioEDDh2dbDoWGQzUkc,11900 diff --git a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/WHEEL b/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/WHEEL deleted file mode 100644 index 8b701e9..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.33.6) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/entry_points.txt b/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/entry_points.txt deleted file mode 100644 index 756d801..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -pygmentize = pygments.cmdline:main - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/top_level.txt b/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/top_level.txt deleted file mode 100644 index a9f49e0..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Pygments-2.5.2.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pygments diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/DESCRIPTION.rst b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/DESCRIPTION.rst deleted file mode 100644 index 4b318b2..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,237 +0,0 @@ -Unidecode, lossy ASCII transliterations of Unicode text -======================================================= - -It often happens that you have text data in Unicode, but you need to -represent it in ASCII. For example when integrating with legacy code that -doesn't support Unicode, or for ease of entry of non-Roman names on a US -keyboard, or when constructing ASCII machine identifiers from -human-readable Unicode strings that should still be somewhat intelligible -(a popular example of this is when making an URL slug from an article -title). - -In most of these examples you could represent Unicode characters as ``???`` or -``\\15BA\\15A0\\1610``, to mention two extreme cases. But that's nearly useless -to someone who actually wants to read what the text says. - -What Unidecode provides is a middle road: the function ``unidecode()`` takes -Unicode data and tries to represent it in ASCII characters (i.e., the -universally displayable characters between 0x00 and 0x7F), where the -compromises taken when mapping between two character sets are chosen to be -near what a human with a US keyboard would choose. - -The quality of resulting ASCII representation varies. For languages of -western origin it should be between perfect and good. On the other hand -transliteration (i.e., conveying, in Roman letters, the pronunciation -expressed by the text in some other writing system) of languages like -Chinese, Japanese or Korean is a very complex issue and this library does -not even attempt to address it. It draws the line at context-free -character-by-character mapping. So a good rule of thumb is that the further -the script you are transliterating is from Latin alphabet, the worse the -transliteration will be. - -Note that this module generally produces better results than simply -stripping accents from characters (which can be done in Python with -built-in functions). It is based on hand-tuned character mappings that for -example also contain ASCII approximations for symbols and non-Latin -alphabets. - -This is a Python port of ``Text::Unidecode`` Perl module by Sean M. Burke -. - - -Module content --------------- - -The module exports a function that takes an Unicode object (Python 2.x) or -string (Python 3.x) and returns a string (that can be encoded to ASCII bytes in -Python 3.x):: - - >>> from unidecode import unidecode - >>> unidecode(u'ko\u017eu\u0161\u010dek') - 'kozuscek' - >>> unidecode(u'30 \U0001d5c4\U0001d5c6/\U0001d5c1') - '30 km/h' - >>> unidecode(u"\u5317\u4EB0") - 'Bei Jing ' - -A utility is also included that allows you to transliterate text from the -command line in several ways. Reading from standard input:: - - $ echo hello | unidecode - hello - -from a command line argument:: - - $ unidecode -c hello - hello - -or from a file:: - - $ unidecode hello.txt - hello - -The default encoding used by the utility depends on your system locale. You can -specify another encoding with the ``-e`` argument. See ``unidecode --help`` for -a full list of available options. - -Requirements ------------- - -Nothing except Python itself. Unidecode supports Python 2.7 and 3.4 or later. - -You need a Python build with "wide" Unicode characters (also called "UCS-4 -build") in order for Unidecode to work correctly with characters outside of -Basic Multilingual Plane (BMP). Common characters outside BMP are bold, italic, -script, etc. variants of the Latin alphabet intended for mathematical notation. -Surrogate pair encoding of "narrow" builds is not supported in Unidecode. - -If your Python build supports "wide" Unicode the following expression will -return True:: - - >>> import sys - >>> sys.maxunicode > 0xffff - True - -See `PEP 261 `_ for details -regarding support for "wide" Unicode characters in Python. - - -Installation ------------- - -To install the latest version of Unidecode from the Python package index, use -these commands:: - - $ pip install unidecode - -To install Unidecode from the source distribution and run unit tests, use:: - - $ python setup.py install - $ python setup.py test - -Frequently asked questions --------------------------- - -German umlauts are transliterated incorrectly - Latin letters "a", "o" and "u" with diaeresis are transliterated by - Unidecode as "a", "o", "u", *not* according to German rules "ae", "oe", - "ue". This is intentional and will not be changed. Rationale is that these - letters are used in languages other than German (for example, Finnish and - Turkish). German text transliterated without the extra "e" is much more - readable than other languages transliterated using German rules. A - workaround is to do your own replacements of these characters before - passing the string to ``unidecode()``. - -Unidecode should support localization (e.g. a language or country parameter, inspecting system locale, etc.) - Language-specific transliteration is a complicated problem and beyond the - scope of this library. Changes related to this will not be accepted. Please - consider using other libraries which do provide this capability, such as - `Unihandecode `_. - -Unidecode should use a permissive license such as MIT or the BSD license. - The maintainer of Unidecode believes that providing access to source code - on redistribution is a fair and reasonable request when basing products on - voluntary work of many contributors. If the license is not suitable for - you, please consider using other libraries, such as `text-unidecode - `_. - -Unidecode produces completely wrong results (e.g. "u" with diaeresis transliterating as "A 1/4 ") - The strings you are passing to Unidecode have been wrongly decoded - somewhere in your program. For example, you might be decoding utf-8 encoded - strings as latin1. With a misconfigured terminal, locale and/or a text - editor this might not be immediately apparent. Inspect your strings with - ``repr()`` and consult the - `Unicode HOWTO `_. - -I've upgraded Unidecode and now some URLs on my website return 404 Not Found. - This is an issue with the software that is running your website, not - Unidecode. Occasionally, new versions of Unidecode library are released - which contain improvements to the transliteration tables. This means that - you cannot rely that ``unidecode()`` output will not change across - different versions of Unidecode library. If you use ``unidecode()`` to - generate URLs for your website, either generate the URL slug once and store - it in the database or lock your dependency of Unidecode to one specific - version. - -Some of the issues in this section are discussed in more detail in `this blog -post `_. - - -Performance notes ------------------ - -By default, ``unidecode()`` optimizes for the use case where most of the strings -passed to it are already ASCII-only and no transliteration is necessary (this -default might change in future versions). - -For performance critical applications, two additional functions are exposed: - -``unidecode_expect_ascii()`` is optimized for ASCII-only inputs (approximately -5 times faster than ``unidecode_expect_nonascii()`` on 10 character strings, -more on longer strings), but slightly slower for non-ASCII inputs. - -``unidecode_expect_nonascii()`` takes approximately the same amount of time on -ASCII and non-ASCII inputs, but is slightly faster for non-ASCII inputs than -``unidecode_expect_ascii()``. - -Apart from differences in run time, both functions produce identical results. -For most users of Unidecode, the difference in performance should be -negligible. - - -Source ------- - -You can get the latest development version of Unidecode with:: - - $ git clone https://www.tablix.org/~avian/git/unidecode.git - -There is also an official mirror of this repository on GitHub at -https://github.com/avian2/unidecode - - -Contact -------- - -Please make sure to read the `Frequently asked questions`_ section above before -contacting the maintainer. - -Bug reports, patches and suggestions for Unidecode can be sent to -tomaz.solc@tablix.org. - -Alternatively, you can also open a ticket or pull request at -https://github.com/avian2/unidecode - - -Copyright ---------- - -Original character transliteration tables: - -Copyright 2001, Sean M. Burke , all rights reserved. - -Python code and later additions: - -Copyright 2019, Tomaz Solc - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., 51 -Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. The programs and -documentation in this dist are distributed in the hope that they will be -useful, but without any warranty; without even the implied warranty of -merchantability or fitness for a particular purpose. - -.. - vim: set filetype=rst: - - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/INSTALLER b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/LICENSE.txt b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/LICENSE.txt deleted file mode 100644 index d159169..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/LICENSE.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/METADATA b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/METADATA deleted file mode 100644 index c73f056..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/METADATA +++ /dev/null @@ -1,261 +0,0 @@ -Metadata-Version: 2.0 -Name: Unidecode -Version: 1.1.1 -Summary: ASCII transliterations of Unicode text -Home-page: UNKNOWN -Author: Tomaz Solc -Author-email: tomaz.solc@tablix.org -License: GPL -Platform: UNKNOWN -Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Text Processing -Classifier: Topic :: Text Processing :: Filters -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* - -Unidecode, lossy ASCII transliterations of Unicode text -======================================================= - -It often happens that you have text data in Unicode, but you need to -represent it in ASCII. For example when integrating with legacy code that -doesn't support Unicode, or for ease of entry of non-Roman names on a US -keyboard, or when constructing ASCII machine identifiers from -human-readable Unicode strings that should still be somewhat intelligible -(a popular example of this is when making an URL slug from an article -title). - -In most of these examples you could represent Unicode characters as ``???`` or -``\\15BA\\15A0\\1610``, to mention two extreme cases. But that's nearly useless -to someone who actually wants to read what the text says. - -What Unidecode provides is a middle road: the function ``unidecode()`` takes -Unicode data and tries to represent it in ASCII characters (i.e., the -universally displayable characters between 0x00 and 0x7F), where the -compromises taken when mapping between two character sets are chosen to be -near what a human with a US keyboard would choose. - -The quality of resulting ASCII representation varies. For languages of -western origin it should be between perfect and good. On the other hand -transliteration (i.e., conveying, in Roman letters, the pronunciation -expressed by the text in some other writing system) of languages like -Chinese, Japanese or Korean is a very complex issue and this library does -not even attempt to address it. It draws the line at context-free -character-by-character mapping. So a good rule of thumb is that the further -the script you are transliterating is from Latin alphabet, the worse the -transliteration will be. - -Note that this module generally produces better results than simply -stripping accents from characters (which can be done in Python with -built-in functions). It is based on hand-tuned character mappings that for -example also contain ASCII approximations for symbols and non-Latin -alphabets. - -This is a Python port of ``Text::Unidecode`` Perl module by Sean M. Burke -. - - -Module content --------------- - -The module exports a function that takes an Unicode object (Python 2.x) or -string (Python 3.x) and returns a string (that can be encoded to ASCII bytes in -Python 3.x):: - - >>> from unidecode import unidecode - >>> unidecode(u'ko\u017eu\u0161\u010dek') - 'kozuscek' - >>> unidecode(u'30 \U0001d5c4\U0001d5c6/\U0001d5c1') - '30 km/h' - >>> unidecode(u"\u5317\u4EB0") - 'Bei Jing ' - -A utility is also included that allows you to transliterate text from the -command line in several ways. Reading from standard input:: - - $ echo hello | unidecode - hello - -from a command line argument:: - - $ unidecode -c hello - hello - -or from a file:: - - $ unidecode hello.txt - hello - -The default encoding used by the utility depends on your system locale. You can -specify another encoding with the ``-e`` argument. See ``unidecode --help`` for -a full list of available options. - -Requirements ------------- - -Nothing except Python itself. Unidecode supports Python 2.7 and 3.4 or later. - -You need a Python build with "wide" Unicode characters (also called "UCS-4 -build") in order for Unidecode to work correctly with characters outside of -Basic Multilingual Plane (BMP). Common characters outside BMP are bold, italic, -script, etc. variants of the Latin alphabet intended for mathematical notation. -Surrogate pair encoding of "narrow" builds is not supported in Unidecode. - -If your Python build supports "wide" Unicode the following expression will -return True:: - - >>> import sys - >>> sys.maxunicode > 0xffff - True - -See `PEP 261 `_ for details -regarding support for "wide" Unicode characters in Python. - - -Installation ------------- - -To install the latest version of Unidecode from the Python package index, use -these commands:: - - $ pip install unidecode - -To install Unidecode from the source distribution and run unit tests, use:: - - $ python setup.py install - $ python setup.py test - -Frequently asked questions --------------------------- - -German umlauts are transliterated incorrectly - Latin letters "a", "o" and "u" with diaeresis are transliterated by - Unidecode as "a", "o", "u", *not* according to German rules "ae", "oe", - "ue". This is intentional and will not be changed. Rationale is that these - letters are used in languages other than German (for example, Finnish and - Turkish). German text transliterated without the extra "e" is much more - readable than other languages transliterated using German rules. A - workaround is to do your own replacements of these characters before - passing the string to ``unidecode()``. - -Unidecode should support localization (e.g. a language or country parameter, inspecting system locale, etc.) - Language-specific transliteration is a complicated problem and beyond the - scope of this library. Changes related to this will not be accepted. Please - consider using other libraries which do provide this capability, such as - `Unihandecode `_. - -Unidecode should use a permissive license such as MIT or the BSD license. - The maintainer of Unidecode believes that providing access to source code - on redistribution is a fair and reasonable request when basing products on - voluntary work of many contributors. If the license is not suitable for - you, please consider using other libraries, such as `text-unidecode - `_. - -Unidecode produces completely wrong results (e.g. "u" with diaeresis transliterating as "A 1/4 ") - The strings you are passing to Unidecode have been wrongly decoded - somewhere in your program. For example, you might be decoding utf-8 encoded - strings as latin1. With a misconfigured terminal, locale and/or a text - editor this might not be immediately apparent. Inspect your strings with - ``repr()`` and consult the - `Unicode HOWTO `_. - -I've upgraded Unidecode and now some URLs on my website return 404 Not Found. - This is an issue with the software that is running your website, not - Unidecode. Occasionally, new versions of Unidecode library are released - which contain improvements to the transliteration tables. This means that - you cannot rely that ``unidecode()`` output will not change across - different versions of Unidecode library. If you use ``unidecode()`` to - generate URLs for your website, either generate the URL slug once and store - it in the database or lock your dependency of Unidecode to one specific - version. - -Some of the issues in this section are discussed in more detail in `this blog -post `_. - - -Performance notes ------------------ - -By default, ``unidecode()`` optimizes for the use case where most of the strings -passed to it are already ASCII-only and no transliteration is necessary (this -default might change in future versions). - -For performance critical applications, two additional functions are exposed: - -``unidecode_expect_ascii()`` is optimized for ASCII-only inputs (approximately -5 times faster than ``unidecode_expect_nonascii()`` on 10 character strings, -more on longer strings), but slightly slower for non-ASCII inputs. - -``unidecode_expect_nonascii()`` takes approximately the same amount of time on -ASCII and non-ASCII inputs, but is slightly faster for non-ASCII inputs than -``unidecode_expect_ascii()``. - -Apart from differences in run time, both functions produce identical results. -For most users of Unidecode, the difference in performance should be -negligible. - - -Source ------- - -You can get the latest development version of Unidecode with:: - - $ git clone https://www.tablix.org/~avian/git/unidecode.git - -There is also an official mirror of this repository on GitHub at -https://github.com/avian2/unidecode - - -Contact -------- - -Please make sure to read the `Frequently asked questions`_ section above before -contacting the maintainer. - -Bug reports, patches and suggestions for Unidecode can be sent to -tomaz.solc@tablix.org. - -Alternatively, you can also open a ticket or pull request at -https://github.com/avian2/unidecode - - -Copyright ---------- - -Original character transliteration tables: - -Copyright 2001, Sean M. Burke , all rights reserved. - -Python code and later additions: - -Copyright 2019, Tomaz Solc - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., 51 -Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. The programs and -documentation in this dist are distributed in the hope that they will be -useful, but without any warranty; without even the implied warranty of -merchantability or fitness for a particular purpose. - -.. - vim: set filetype=rst: - - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/RECORD b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/RECORD deleted file mode 100644 index 136073d..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/RECORD +++ /dev/null @@ -1,394 +0,0 @@ -../../../bin/unidecode,sha256=qd_J1CTNP2UjpvEysgIU5xflzbCokXrXR1wzpPbKvhU,250 -Unidecode-1.1.1.dist-info/DESCRIPTION.rst,sha256=1qgo-PnPYFf7RjSFGEnFbEL6FdtVq5GJMUDpysakI6A,9474 -Unidecode-1.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Unidecode-1.1.1.dist-info/LICENSE.txt,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092 -Unidecode-1.1.1.dist-info/METADATA,sha256=tYiBHi608dh-oJ4Eev65ipZFvIjgAVbj-peGVHYr73I,10442 -Unidecode-1.1.1.dist-info/RECORD,, -Unidecode-1.1.1.dist-info/WHEEL,sha256=o2k-Qa-RMNIJmUdIc7KU6VWR_ErNRbWNlxDIpl7lm34,110 -Unidecode-1.1.1.dist-info/entry_points.txt,sha256=ItDp7W6CoSJQAKqdiUkzmecugvKvWzjfN7MMK52GM10,51 -Unidecode-1.1.1.dist-info/metadata.json,sha256=uK7I5vPstQ58Y3hzy2i7dCLyq5GjVCJPIxQk1MZt8x0,1200 -Unidecode-1.1.1.dist-info/top_level.txt,sha256=4uYNG2l04s0dm0mEQmPLo2zrjLbhLPKUesLr2dOTdpo,10 -unidecode/__init__.py,sha256=OdPRbXia-xzzGelCHnVh_zmcHJA2s2wP6RGocPnCihU,3094 -unidecode/__main__.py,sha256=VWYWCclyJsdhtNMQtryMFbgsCZtNUsWcEuS7ZOlH1Jc,40 -unidecode/__pycache__/__init__.cpython-38.pyc,, -unidecode/__pycache__/__main__.cpython-38.pyc,, -unidecode/__pycache__/util.cpython-38.pyc,, -unidecode/__pycache__/x000.cpython-38.pyc,, -unidecode/__pycache__/x001.cpython-38.pyc,, -unidecode/__pycache__/x002.cpython-38.pyc,, -unidecode/__pycache__/x003.cpython-38.pyc,, -unidecode/__pycache__/x004.cpython-38.pyc,, -unidecode/__pycache__/x005.cpython-38.pyc,, -unidecode/__pycache__/x006.cpython-38.pyc,, -unidecode/__pycache__/x007.cpython-38.pyc,, -unidecode/__pycache__/x009.cpython-38.pyc,, -unidecode/__pycache__/x00a.cpython-38.pyc,, -unidecode/__pycache__/x00b.cpython-38.pyc,, -unidecode/__pycache__/x00c.cpython-38.pyc,, -unidecode/__pycache__/x00d.cpython-38.pyc,, -unidecode/__pycache__/x00e.cpython-38.pyc,, -unidecode/__pycache__/x00f.cpython-38.pyc,, -unidecode/__pycache__/x010.cpython-38.pyc,, -unidecode/__pycache__/x011.cpython-38.pyc,, -unidecode/__pycache__/x012.cpython-38.pyc,, -unidecode/__pycache__/x013.cpython-38.pyc,, -unidecode/__pycache__/x014.cpython-38.pyc,, -unidecode/__pycache__/x015.cpython-38.pyc,, -unidecode/__pycache__/x016.cpython-38.pyc,, -unidecode/__pycache__/x017.cpython-38.pyc,, -unidecode/__pycache__/x018.cpython-38.pyc,, -unidecode/__pycache__/x01d.cpython-38.pyc,, -unidecode/__pycache__/x01e.cpython-38.pyc,, -unidecode/__pycache__/x01f.cpython-38.pyc,, -unidecode/__pycache__/x020.cpython-38.pyc,, -unidecode/__pycache__/x021.cpython-38.pyc,, -unidecode/__pycache__/x022.cpython-38.pyc,, -unidecode/__pycache__/x023.cpython-38.pyc,, -unidecode/__pycache__/x024.cpython-38.pyc,, -unidecode/__pycache__/x025.cpython-38.pyc,, -unidecode/__pycache__/x026.cpython-38.pyc,, -unidecode/__pycache__/x027.cpython-38.pyc,, -unidecode/__pycache__/x028.cpython-38.pyc,, -unidecode/__pycache__/x029.cpython-38.pyc,, -unidecode/__pycache__/x02a.cpython-38.pyc,, -unidecode/__pycache__/x02c.cpython-38.pyc,, -unidecode/__pycache__/x02e.cpython-38.pyc,, -unidecode/__pycache__/x02f.cpython-38.pyc,, -unidecode/__pycache__/x030.cpython-38.pyc,, -unidecode/__pycache__/x031.cpython-38.pyc,, -unidecode/__pycache__/x032.cpython-38.pyc,, -unidecode/__pycache__/x033.cpython-38.pyc,, -unidecode/__pycache__/x04d.cpython-38.pyc,, -unidecode/__pycache__/x04e.cpython-38.pyc,, -unidecode/__pycache__/x04f.cpython-38.pyc,, -unidecode/__pycache__/x050.cpython-38.pyc,, -unidecode/__pycache__/x051.cpython-38.pyc,, -unidecode/__pycache__/x052.cpython-38.pyc,, -unidecode/__pycache__/x053.cpython-38.pyc,, -unidecode/__pycache__/x054.cpython-38.pyc,, -unidecode/__pycache__/x055.cpython-38.pyc,, -unidecode/__pycache__/x056.cpython-38.pyc,, -unidecode/__pycache__/x057.cpython-38.pyc,, -unidecode/__pycache__/x058.cpython-38.pyc,, -unidecode/__pycache__/x059.cpython-38.pyc,, -unidecode/__pycache__/x05a.cpython-38.pyc,, -unidecode/__pycache__/x05b.cpython-38.pyc,, -unidecode/__pycache__/x05c.cpython-38.pyc,, -unidecode/__pycache__/x05d.cpython-38.pyc,, -unidecode/__pycache__/x05e.cpython-38.pyc,, -unidecode/__pycache__/x05f.cpython-38.pyc,, -unidecode/__pycache__/x060.cpython-38.pyc,, -unidecode/__pycache__/x061.cpython-38.pyc,, -unidecode/__pycache__/x062.cpython-38.pyc,, -unidecode/__pycache__/x063.cpython-38.pyc,, -unidecode/__pycache__/x064.cpython-38.pyc,, -unidecode/__pycache__/x065.cpython-38.pyc,, -unidecode/__pycache__/x066.cpython-38.pyc,, -unidecode/__pycache__/x067.cpython-38.pyc,, -unidecode/__pycache__/x068.cpython-38.pyc,, -unidecode/__pycache__/x069.cpython-38.pyc,, -unidecode/__pycache__/x06a.cpython-38.pyc,, -unidecode/__pycache__/x06b.cpython-38.pyc,, -unidecode/__pycache__/x06c.cpython-38.pyc,, -unidecode/__pycache__/x06d.cpython-38.pyc,, -unidecode/__pycache__/x06e.cpython-38.pyc,, -unidecode/__pycache__/x06f.cpython-38.pyc,, -unidecode/__pycache__/x070.cpython-38.pyc,, -unidecode/__pycache__/x071.cpython-38.pyc,, -unidecode/__pycache__/x072.cpython-38.pyc,, -unidecode/__pycache__/x073.cpython-38.pyc,, -unidecode/__pycache__/x074.cpython-38.pyc,, -unidecode/__pycache__/x075.cpython-38.pyc,, -unidecode/__pycache__/x076.cpython-38.pyc,, -unidecode/__pycache__/x077.cpython-38.pyc,, -unidecode/__pycache__/x078.cpython-38.pyc,, -unidecode/__pycache__/x079.cpython-38.pyc,, -unidecode/__pycache__/x07a.cpython-38.pyc,, -unidecode/__pycache__/x07b.cpython-38.pyc,, -unidecode/__pycache__/x07c.cpython-38.pyc,, -unidecode/__pycache__/x07d.cpython-38.pyc,, -unidecode/__pycache__/x07e.cpython-38.pyc,, -unidecode/__pycache__/x07f.cpython-38.pyc,, -unidecode/__pycache__/x080.cpython-38.pyc,, -unidecode/__pycache__/x081.cpython-38.pyc,, -unidecode/__pycache__/x082.cpython-38.pyc,, -unidecode/__pycache__/x083.cpython-38.pyc,, -unidecode/__pycache__/x084.cpython-38.pyc,, -unidecode/__pycache__/x085.cpython-38.pyc,, -unidecode/__pycache__/x086.cpython-38.pyc,, -unidecode/__pycache__/x087.cpython-38.pyc,, -unidecode/__pycache__/x088.cpython-38.pyc,, -unidecode/__pycache__/x089.cpython-38.pyc,, -unidecode/__pycache__/x08a.cpython-38.pyc,, -unidecode/__pycache__/x08b.cpython-38.pyc,, -unidecode/__pycache__/x08c.cpython-38.pyc,, -unidecode/__pycache__/x08d.cpython-38.pyc,, -unidecode/__pycache__/x08e.cpython-38.pyc,, -unidecode/__pycache__/x08f.cpython-38.pyc,, -unidecode/__pycache__/x090.cpython-38.pyc,, -unidecode/__pycache__/x091.cpython-38.pyc,, -unidecode/__pycache__/x092.cpython-38.pyc,, -unidecode/__pycache__/x093.cpython-38.pyc,, -unidecode/__pycache__/x094.cpython-38.pyc,, -unidecode/__pycache__/x095.cpython-38.pyc,, -unidecode/__pycache__/x096.cpython-38.pyc,, -unidecode/__pycache__/x097.cpython-38.pyc,, -unidecode/__pycache__/x098.cpython-38.pyc,, -unidecode/__pycache__/x099.cpython-38.pyc,, -unidecode/__pycache__/x09a.cpython-38.pyc,, -unidecode/__pycache__/x09b.cpython-38.pyc,, -unidecode/__pycache__/x09c.cpython-38.pyc,, -unidecode/__pycache__/x09d.cpython-38.pyc,, -unidecode/__pycache__/x09e.cpython-38.pyc,, -unidecode/__pycache__/x09f.cpython-38.pyc,, -unidecode/__pycache__/x0a0.cpython-38.pyc,, -unidecode/__pycache__/x0a1.cpython-38.pyc,, -unidecode/__pycache__/x0a2.cpython-38.pyc,, -unidecode/__pycache__/x0a3.cpython-38.pyc,, -unidecode/__pycache__/x0a4.cpython-38.pyc,, -unidecode/__pycache__/x0ac.cpython-38.pyc,, -unidecode/__pycache__/x0ad.cpython-38.pyc,, -unidecode/__pycache__/x0ae.cpython-38.pyc,, -unidecode/__pycache__/x0af.cpython-38.pyc,, -unidecode/__pycache__/x0b0.cpython-38.pyc,, -unidecode/__pycache__/x0b1.cpython-38.pyc,, -unidecode/__pycache__/x0b2.cpython-38.pyc,, -unidecode/__pycache__/x0b3.cpython-38.pyc,, -unidecode/__pycache__/x0b4.cpython-38.pyc,, -unidecode/__pycache__/x0b5.cpython-38.pyc,, -unidecode/__pycache__/x0b6.cpython-38.pyc,, -unidecode/__pycache__/x0b7.cpython-38.pyc,, -unidecode/__pycache__/x0b8.cpython-38.pyc,, -unidecode/__pycache__/x0b9.cpython-38.pyc,, -unidecode/__pycache__/x0ba.cpython-38.pyc,, -unidecode/__pycache__/x0bb.cpython-38.pyc,, -unidecode/__pycache__/x0bc.cpython-38.pyc,, -unidecode/__pycache__/x0bd.cpython-38.pyc,, -unidecode/__pycache__/x0be.cpython-38.pyc,, -unidecode/__pycache__/x0bf.cpython-38.pyc,, -unidecode/__pycache__/x0c0.cpython-38.pyc,, -unidecode/__pycache__/x0c1.cpython-38.pyc,, -unidecode/__pycache__/x0c2.cpython-38.pyc,, -unidecode/__pycache__/x0c3.cpython-38.pyc,, -unidecode/__pycache__/x0c4.cpython-38.pyc,, -unidecode/__pycache__/x0c5.cpython-38.pyc,, -unidecode/__pycache__/x0c6.cpython-38.pyc,, -unidecode/__pycache__/x0c7.cpython-38.pyc,, -unidecode/__pycache__/x0c8.cpython-38.pyc,, -unidecode/__pycache__/x0c9.cpython-38.pyc,, -unidecode/__pycache__/x0ca.cpython-38.pyc,, -unidecode/__pycache__/x0cb.cpython-38.pyc,, -unidecode/__pycache__/x0cc.cpython-38.pyc,, -unidecode/__pycache__/x0cd.cpython-38.pyc,, -unidecode/__pycache__/x0ce.cpython-38.pyc,, -unidecode/__pycache__/x0cf.cpython-38.pyc,, -unidecode/__pycache__/x0d0.cpython-38.pyc,, -unidecode/__pycache__/x0d1.cpython-38.pyc,, -unidecode/__pycache__/x0d2.cpython-38.pyc,, -unidecode/__pycache__/x0d3.cpython-38.pyc,, -unidecode/__pycache__/x0d4.cpython-38.pyc,, -unidecode/__pycache__/x0d5.cpython-38.pyc,, -unidecode/__pycache__/x0d6.cpython-38.pyc,, -unidecode/__pycache__/x0d7.cpython-38.pyc,, -unidecode/__pycache__/x0f9.cpython-38.pyc,, -unidecode/__pycache__/x0fa.cpython-38.pyc,, -unidecode/__pycache__/x0fb.cpython-38.pyc,, -unidecode/__pycache__/x0fc.cpython-38.pyc,, -unidecode/__pycache__/x0fd.cpython-38.pyc,, -unidecode/__pycache__/x0fe.cpython-38.pyc,, -unidecode/__pycache__/x0ff.cpython-38.pyc,, -unidecode/__pycache__/x1d4.cpython-38.pyc,, -unidecode/__pycache__/x1d5.cpython-38.pyc,, -unidecode/__pycache__/x1d6.cpython-38.pyc,, -unidecode/__pycache__/x1d7.cpython-38.pyc,, -unidecode/__pycache__/x1f1.cpython-38.pyc,, -unidecode/util.py,sha256=qR0aGIMExGrFUGmojfAMdbRklcXrAPvXpU1evPXCa4g,1782 -unidecode/x000.py,sha256=dxTi7LcLTlbF3ZGGk9xPjx8sx2M6qPBIs2b5RS2DVNY,3041 -unidecode/x001.py,sha256=ylHh3UVaPtibVuUEEWvdSeDFK0OXrWt4-LnxAgYD6qo,3891 -unidecode/x002.py,sha256=Hoks5fu8uyhwDuJt93BiC6iYv_HVY4bIvKklyAtBoFI,3889 -unidecode/x003.py,sha256=UdskMuqktghKcjLeegwYkyfhDH3lgi_G5rr7ID5W0-s,3875 -unidecode/x004.py,sha256=85Sh4Rem7dRS7kIx6yGQqA7U7MxqCD40DGoqaob9MzI,4071 -unidecode/x005.py,sha256=qPEepEySMuoXFtVhrFw-y69wnVQGcFmk_0vtcUzDYTo,3997 -unidecode/x006.py,sha256=4fZWzc5DGZVFD1zvHtkywMHykQTiFgA7M6LMowpaGI0,3961 -unidecode/x007.py,sha256=k2kkTXdbKqMFOQy2TlGmRnoRYMCOvqTfjusGV76u9SE,4122 -unidecode/x009.py,sha256=aZrWpXwsS2yIyO8oZIIN3Uo4j0XdpaJq5VGdCu3e8cc,4075 -unidecode/x00a.py,sha256=UrXdvZ-qVMfWRSRW8HwrxfNXB-Jp0lgW2iPs6roZXz4,4121 -unidecode/x00b.py,sha256=MjqdSyCxXLZ6wUrgeS8A-wop9S78EEK9e-BJ4HpAqLA,4132 -unidecode/x00c.py,sha256=y-y0RqVolrIBfsj1DtT_rQUbmxxjoKnWlZDMPPC6Om4,4102 -unidecode/x00d.py,sha256=OVfHvb44WS_aMXSWrZt-693xJ70L4sepcyJFIkl23TY,4121 -unidecode/x00e.py,sha256=9N9w09V225dx1-e8w0HRaIoD66mpDhHgoQ-RlPZznmA,4092 -unidecode/x00f.py,sha256=Vak8Z6Dy6ucFysFSNBt24ZE4h2ZSXQcBLiWCSC27bSA,4061 -unidecode/x010.py,sha256=9vck5PTRcz5Q64F_2dIMQoPGEFTHWjvwq7ZE90nvOK4,4110 -unidecode/x011.py,sha256=8EN-PZS-ythtQlU3HZYNkGePm3oWFzSOgOorkeQUBV4,4135 -unidecode/x012.py,sha256=2onQfsL5e7X4RB9DKehMUcG81gaSav4UwGalXulnxOE,4318 -unidecode/x013.py,sha256=Nl9CnUVkJkXBux5TEia5Vq1nPjTICUUyT77GhkChbrQ,4247 -unidecode/x014.py,sha256=CkrW473dLq_AllpcK8teAUQSeglML_MZ6t9TsK5g9wE,4300 -unidecode/x015.py,sha256=TB6O4l2qPxbmF2dejlxXLqX5tTfjl95cMYx1770GHs0,4329 -unidecode/x016.py,sha256=M9kiUT0ScE5acj-tkomNZ0eND1lvau0i6tJOWepU1FA,4140 -unidecode/x017.py,sha256=nsZP_7vWKOTYY8LOE535g67qwwaMdGblZ-79MbfTNX8,4190 -unidecode/x018.py,sha256=_qBETpive71IdV6nD0md6KaSHaxaSpPUsTTHtVlE4KM,4099 -unidecode/x01d.py,sha256=EwAYkMVHAFvbKRzsQ-e4cRcvS_eia3kYCM2GcaqkBWY,3701 -unidecode/x01e.py,sha256=oVdWd4v85k-Slc3V0i2NZ4i5G866X6Qw7bKXJDmbXig,3853 -unidecode/x01f.py,sha256=pG-fs1iD7O3vSwIx6Ibz5MhpZI_NsQWEDlHiRpxgZC0,3899 -unidecode/x020.py,sha256=k9PWwEJiWl7yUFTVR89cl2XuYqWDEiVfrXvSqOaeJH4,4010 -unidecode/x021.py,sha256=Ns9H51Q51tDB-mRSERyMN1y2EiE7UPQx9K3BxwaFrQs,4012 -unidecode/x022.py,sha256=OzIXC-VMfUskTtEe5_m3zpmgtKtJSDY0XBZ5C0codi8,4329 -unidecode/x023.py,sha256=FFgn4hJ7Q4SbsxFtHUa8SuQ0VBJ9hkod5QTWaMmkk9U,4341 -unidecode/x024.py,sha256=pMZqUxkwfgz9n9NXpUaAaNr-p9ACNCyfTQKo2PFJ11w,4049 -unidecode/x025.py,sha256=-dvBV3byxxngHQcQx7Jjt9dwtehBaQwRoCnX3ZAzWe0,3871 -unidecode/x026.py,sha256=N7i11hEwuiW9mSEp0Dk4Aa9iIsHsxAYhLAplqZnUMs0,4020 -unidecode/x027.py,sha256=wZ1l328qv5BWbk-FPr34ayyJ4rWQG3EQIsPxd7GilFg,3783 -unidecode/x028.py,sha256=FZPCZ9w3N3WOI42h2gHEQgVOAlLBNTZjMu_KQQkIMdk,5069 -unidecode/x029.py,sha256=TlYRf7ym0R-L7DncmX4RNZX5kKctvGFLbtu8GPkxqpE,3584 -unidecode/x02a.py,sha256=WD3uhv1sNhQB45ugiKUk4Btj3aj8qcH_kpwrV3jRWJw,3589 -unidecode/x02c.py,sha256=zRG2Elxv5SlYrBpJb1NUz7WsJOFAkzwSi991cMyhnJs,3596 -unidecode/x02e.py,sha256=_ntc-U9pwAkGQkFC3zdQgJNUZSv9W4115ouIbINGyw4,4461 -unidecode/x02f.py,sha256=9cxem6MFm7acjUDcmYLk9lbxEyfP2xMjfE3c-6PUEbg,4572 -unidecode/x030.py,sha256=aHVHcoSl5FcxX9QQALaW5n1zYJ0Ymap-wgWuzojXLyY,4037 -unidecode/x031.py,sha256=vRlzxBKPo5s3ZDpUojrXelZKjTEwR8fsnm3vUeB5bp8,4125 -unidecode/x032.py,sha256=BSZV_t8jVsWX_RsoqajWAqigQaHh3wXmoMG5wUZtgos,4485 -unidecode/x033.py,sha256=ImTd4BRRPgCqWmrvJPoikoL0dJMKH8eQgd48vksi60A,4513 -unidecode/x04d.py,sha256=d5K-HbR3Gg1VBdMk1GO6PJdoseRRIV5ef4aQbslnsBo,4528 -unidecode/x04e.py,sha256=z04XMxt3y016alep4Xg8Zjh4cvBj6CddjD9Qv6sr6v4,4646 -unidecode/x04f.py,sha256=zEf_S6bDF755svnPRWyreVf2Q4SekYMxIpGf1Jb2alc,4607 -unidecode/x050.py,sha256=MNhEf7TRcQ2CdgkMcFloEGSbTtrsXK-6r6Ru7HDG6hU,4682 -unidecode/x051.py,sha256=VY0jC10xdU7bm21Cig5omd7L-4hiSk_rk2UTR_yTF3g,4685 -unidecode/x052.py,sha256=a09eo_5pL6jpU9TW-zG2w2iXTYp6awtQ4OxGnLdcwKg,4654 -unidecode/x053.py,sha256=so5U-CQ5jRbp7AYZZPCdmkdnNtfNn_-Nl_761eBMtIU,4616 -unidecode/x054.py,sha256=Htu6ZFPTTyBHUU1Ia-mc7Y3Dy4j1cp-fRwag0HGwmwk,4583 -unidecode/x055.py,sha256=WzgwsrHInE1H-O519FOIybJpofzdyfu7w5NZ5I2OtQI,4599 -unidecode/x056.py,sha256=t4ZVJlxic1vcqhrypLWRd3LyIfEuWoPIz343pCrfW7k,4615 -unidecode/x057.py,sha256=ndJuRj4TnvSe6aLX-yzDYHnWEl1JfqA6HnQvzsf2Fyo,4631 -unidecode/x058.py,sha256=nkaS7T1PVlhKlxVd-WrDw4Gx14mciLEZQrUt-9NpkD0,4678 -unidecode/x059.py,sha256=9wAKGpczWuyqMb89px7Ldy1McHecDXd8RMJ7lXwcBCU,4644 -unidecode/x05a.py,sha256=F150z3X248dkDgTq-0lyL-bLRqZZd7U0mkUI6PJRwwM,4636 -unidecode/x05b.py,sha256=LeJj8prX04qvLHFaeG-b2YE9LqIbnUec6pFD-7E918c,4668 -unidecode/x05c.py,sha256=Citt0KhdqvWkErFdpeSyg6x5CviH1opVRPSD6eBWjsA,4612 -unidecode/x05d.py,sha256=w1vKjN5RWPiwP535FCiqakz1IbeB4MGe2ANVM_bcdq4,4670 -unidecode/x05e.py,sha256=6Z7gnAXq9tVwvFIwh632oLQuEiHz1atcqIDREeoqldM,4668 -unidecode/x05f.py,sha256=Ho5tdX7JErho7LjeVCxf29XlWeEpDt5RUJC3nbw2j8M,4660 -unidecode/x060.py,sha256=2x6hmUwn_V3icd1kdfzkkDp5iEdmij7zpUWizfVIE7Q,4642 -unidecode/x061.py,sha256=hwSoPcP4PLy5zPITLdSVaYGwt_fIH9kJPpshKJZi-LA,4662 -unidecode/x062.py,sha256=rH9eYXX_t-Z4-pOy9-lyVm68zXt114X3lAIBI5JG_Qs,4620 -unidecode/x063.py,sha256=n8aXYOPurrEbBzz4DAl-tFOFiqMJ-r1Yt3WpM3ZGTq0,4656 -unidecode/x064.py,sha256=uBebjkUmgQVzK0tKWjxLZwQ1oC9KMEppv0W6caB8v1g,4655 -unidecode/x065.py,sha256=cFnHSLoNwMG6PJvxWWeWShSkHoB9IYTS2LJCc8W0l4I,4638 -unidecode/x066.py,sha256=gV2vx0TqIA44PBOzF02wetf3dxXcXmg8Jr2CtzxMDFU,4677 -unidecode/x067.py,sha256=9ck2UFSv8UL3c0RHPTdV4Rzq7ogZVedwsMAYhGE1lmM,4635 -unidecode/x068.py,sha256=aTAAeHLr5-VnMqNF0h9KC4tFOusV9PpWdywp7xllAA0,4674 -unidecode/x069.py,sha256=8_VMN2vGqNAPrP8iPxICRI9PN81Hts21FM1A4n1_7to,4673 -unidecode/x06a.py,sha256=e7ahJ-j5YvomZvQcIxfAMbHgijbKncYoTN9TakDQqig,4674 -unidecode/x06b.py,sha256=lBRWVhTMJPBKWAyAT23PueHtw9wXTuUG9S2UVWjosr4,4608 -unidecode/x06c.py,sha256=i8xXjlNwhXxvrHdnTbdy-jTfml_fD0uFURctA1BQKk0,4643 -unidecode/x06d.py,sha256=BvgJd7TNj6cL6I5bjPXngi3tJPo0YfhISCHSXvfmsTk,4651 -unidecode/x06e.py,sha256=jZ6VeQbASYGtx0QXySzZzRQf_LqtPAU6jhTo3U_nFTU,4640 -unidecode/x06f.py,sha256=W0A95toB7w7pLrohCaet_d0-S3V84fjzTKgZ6vhUtok,4650 -unidecode/x070.py,sha256=lVM1qXUltqIrKIi0WPH1F5Feuq4M007nm3lOkR_EB2s,4693 -unidecode/x071.py,sha256=v2V3WNKPVEhuJ_RX6rZA45rFIukgMCJ8rqPoUwj05zc,4670 -unidecode/x072.py,sha256=NhOkJEqApO9shkYgwdWVarVUDmWailI4N1vNiLGkOSM,4659 -unidecode/x073.py,sha256=loYg-ZrK1rdy2CkbQfd4qydW8lCeiNywEzT6gLTN-GI,4646 -unidecode/x074.py,sha256=FLIumUZcrCy9Y6eXL5BLpa_hE5HMGbPo-PWtFBh-rBs,4696 -unidecode/x075.py,sha256=P3SrhI5BQ5sJ66hyu_LWDONpuzLZJBKsl7f-A37sJXc,4675 -unidecode/x076.py,sha256=3enaJAMy951MK_yBnhJiOmoTdzU0eJ2uEgoRgZRTUn0,4639 -unidecode/x077.py,sha256=XH_TjHspGSnu4v3qgNOqFNMvZKZcA-HH6q_GWB48Cos,4675 -unidecode/x078.py,sha256=L9XOo8UH_x-prQC_edArnTs-j2asZR940sLaPST2iy0,4648 -unidecode/x079.py,sha256=6e29mgaXPmtMrU8_QRfmZpWZW8o-yEeeIOgAHOoepo8,4602 -unidecode/x07a.py,sha256=fMACYuAsIumgE8XkYnM2795HtFA6weH4YLn7jgJLbbw,4669 -unidecode/x07b.py,sha256=UH8ZXsR11pINz0AaxJ8etTTyaXiCawjuLcctzp4FwZc,4669 -unidecode/x07c.py,sha256=fpqGGsF0-rEVxBeVFf0RM8fjweUlg-9UduAtxAjL5vc,4663 -unidecode/x07d.py,sha256=EKFrTQTNFLGnsm3qI76ALxrxGCcDuyEbapi9j9jy1B4,4678 -unidecode/x07e.py,sha256=n2OG5xe8I-V0pn98Q2E-7PbXSQQI72ozNNUXFnMZHvM,4682 -unidecode/x07f.py,sha256=g455qjG3LBu9ujuuTt5xrRn2djK_iVXAJ4dUVl-bYfs,4664 -unidecode/x080.py,sha256=Fuqy0RgnvfvFFdmGiaHwK2B60UCU5Aw4fyF79kBfhr8,4651 -unidecode/x081.py,sha256=rQg3Hjqo61bEKCpb7TybHDLv2Hgu-_ghKdW6xk9xOhU,4673 -unidecode/x082.py,sha256=sRjOiGrYy2RtqqH_xQdL6_i17I-wJZI6ag7404mL4M8,4649 -unidecode/x083.py,sha256=8hCxGV2o1kFA6hMFvk4Ici_QKynDCYjDWjzCuMyfmHI,4643 -unidecode/x084.py,sha256=jIDgDPhwssUcLgA7N0ZINrB_qZn1P4C7lHyvP7yKA6o,4646 -unidecode/x085.py,sha256=5063XP5F72OEYuqjETqFlN_7IaU1A0feVuvIup9R0rI,4636 -unidecode/x086.py,sha256=ovNLdMRRHm4jngDGXmwG66zZH6l-V-uMtoYnXB_W_QY,4614 -unidecode/x087.py,sha256=-VmLJWGVMGF9BxYD8VcTc8TS83W27qcERuycKCfpLBc,4649 -unidecode/x088.py,sha256=E63aAVUF0B1f-5XL7fOUWqXL2juUJLU9TwO_LHKvd2Q,4645 -unidecode/x089.py,sha256=mrKWneiJ2hIFkM4cu4bU0IQMvTRWgXZ8rsDW575jp9A,4628 -unidecode/x08a.py,sha256=NjMp9ck824PXG2gcJXfi_9oQCFgXhhiallO3bYCtXCE,4647 -unidecode/x08b.py,sha256=W1kAtliqhm5x28Kxc6kUrjzqo-xc_HmYY0BjHhEV2x4,4643 -unidecode/x08c.py,sha256=aDhwugSrvtUhDdwbACfjS0EkBqGojwny-qbrQRJfPhA,4630 -unidecode/x08d.py,sha256=oyydBTJng0ip79lUTBHoTIqGjxmHTb0twkPZqE7LxeU,4636 -unidecode/x08e.py,sha256=w-FysLX-LgmggEuhmPZjyT67-i4_EB8Hx44i_X_Q3Nc,4659 -unidecode/x08f.py,sha256=adygkkCQn4W6YhJUknf2O-2eM_LzH1LfjjpgenbPh80,4651 -unidecode/x090.py,sha256=j-5qrCDDHYKJnbHL5A_fm5ISrdFVgDR5bXQbP18G-14,4631 -unidecode/x091.py,sha256=S8jlVjjPNLPCsSXK8qKXqGGoTLj-LWje5J-f-2AAEXY,4655 -unidecode/x092.py,sha256=uSF8NVYh_UGJE2pcl4JrVU2Prb-T2crGLCE4XQe7DfQ,4648 -unidecode/x093.py,sha256=oMiZM1VfvfKnwVKSJh28iynWJG8iQtKu_1zsrbPdPNs,4666 -unidecode/x094.py,sha256=MShhNv4E9bj9jmQEtWHi_8ZjeS4p2Iz6j3j9kJb5rK0,4661 -unidecode/x095.py,sha256=BQ1R6QwhWjC_Eb7zIbWP0A2ro7bI-t6fTAQWLFMmzAM,4671 -unidecode/x096.py,sha256=N9hLQrZhbTXC9boxDcWu3WESTIB6En82kJkBY-6qBRI,4610 -unidecode/x097.py,sha256=K4waHuw6tNchmcY7Glc-Su6cTG3-iF_X_egYuG-E4fA,4643 -unidecode/x098.py,sha256=CFFcb5gpK7FBqPsFwRoLP0YcYFJBGgh3l-Rf4PzXbjc,4645 -unidecode/x099.py,sha256=e9w1-tsa3tCYYQXn71Ey1bg_n2UYudMQ0y-zSSCdajE,4629 -unidecode/x09a.py,sha256=Z8pQsTc62CWgm0JPnj3kokKKf9_qfzRpo0u5iH61CaE,4623 -unidecode/x09b.py,sha256=piSZ2AAK5GavHJEa8qwI_lrldSSgNhxYvLua0Au_1aA,4655 -unidecode/x09c.py,sha256=NveMhN85_Cm4H1cnfHDTcnSj675MOVBq9Lkjpw3YxA0,4659 -unidecode/x09d.py,sha256=2Sj376QIs8rJ7VDrPW5RELhkJ8LI5JI4NRbFcl4DXlE,4632 -unidecode/x09e.py,sha256=z1bF6AML_d20dQm9HD7YBrnKqTQVjeTTI999hcLEe0M,4615 -unidecode/x09f.py,sha256=T-pS5hli39rA1GDDqZYfyHRupPALqklPXA-1i8pgc1I,4509 -unidecode/x0a0.py,sha256=EpopPuuocybgCcpX19Ii-udqsPXJjSces3360lqJ8vs,4428 -unidecode/x0a1.py,sha256=0hvF77d5E640SujjdHVqy5gMUH85gEdOv80eRvCEAGM,4469 -unidecode/x0a2.py,sha256=9Icpfk_ElebYd_xN09OMziFrpAGPXEUNVmawpnhbBaQ,4503 -unidecode/x0a3.py,sha256=G1lPrnCqYz0s4wsSa1qM0WgrZBWO_beRk3AgK0iVZLA,4521 -unidecode/x0a4.py,sha256=vS-wPpkfMmwRJjXTBYM4BGpzBfDoKWMadNNWaTPYcpI,4437 -unidecode/x0ac.py,sha256=wj7hl88VlCdc_eGpOL4m4CBJILyQqd9atObC5Xvd0aA,4709 -unidecode/x0ad.py,sha256=Rz5rn0fM-CqRjaN4TvSq_1StAQdyAF2WX3cUvcQHaWU,4766 -unidecode/x0ae.py,sha256=jNIBVB-Pw2ZNihAeyWbDIEq9Yt9zlhdfGylfvAaxUks,4875 -unidecode/x0af.py,sha256=Am5YC8Zfrun5NUKxU6LrU2-d5GgkGSBs7fZt2rqSi74,5012 -unidecode/x0b0.py,sha256=1bgHerCDAqIcJHYeGddJjJfRWiHCKtU2B0J-XGvcbbc,4853 -unidecode/x0b1.py,sha256=Six-lzGdvgJx4YsIa0lTusnBEV1zbCKQCquq17TDJoQ,4746 -unidecode/x0b2.py,sha256=HQDbmglNi4QfiRSGucUclgq_4FGpRjbJkWU1JTLAFGc,4680 -unidecode/x0b3.py,sha256=1lqxghVZiiStOAx1IG_vc1zZTXrAa7Z__QY6ZWvo2aA,4741 -unidecode/x0b4.py,sha256=V6BNSTxpyP8VuqF7x5z7bpF3MQAkwZfKtEu6NFr_vSg,4762 -unidecode/x0b5.py,sha256=9NVd2hNLyRlLceVlznba1dreqBGeKU_0gzmkgAw0gyg,4919 -unidecode/x0b6.py,sha256=V_vRsB0GICu9hqhO4pnbPWreDSevJ3bbmLRJkuQUxnE,4996 -unidecode/x0b7.py,sha256=CwBaCBICyVagnFjUpkwabuDvBJw7gAeqkSRpfBAVv8s,4833 -unidecode/x0b8.py,sha256=xYp-xy2LIwq95OWyS9vYMc_Z5od9dud0W1dxeg4P_Jk,4714 -unidecode/x0b9.py,sha256=z3hKNzBq_MeK9V3AyQzaY58cgi0-VGOsLk3-UFmszLQ,4704 -unidecode/x0ba.py,sha256=4gubifoBeJUUrwXEI4litJygekufEycmWDLrJ-Qvs14,4765 -unidecode/x0bb.py,sha256=bsCTABUdC6yTn8_0vhYe5jRP1z_BoAdificB8Y1c1hA,4730 -unidecode/x0bc.py,sha256=AhQvAz7yHlbQ_4c2KOIisq07eZJ5JQn6cV8I31oT9kg,4707 -unidecode/x0bd.py,sha256=IGtyVxIUr1mU3hokn6iUDJhXZezQozVvfWOyf4Pa5dI,4752 -unidecode/x0be.py,sha256=1D-hXu3p3wvOnGVMjEqVsrltYe7UuSwit2yqN5eFizc,4849 -unidecode/x0bf.py,sha256=NkEXqr2ER3BNFkTasDV9CHnkRBuX_Ao5OHGv_NgKAew,5010 -unidecode/x0c0.py,sha256=zDlHpyM0omza5TqGLb8Rhl7Wd-LlV1AjvH_xdnEnNFw,4856 -unidecode/x0c1.py,sha256=AC6xJyx9UblKAGNqGN7AH2Idb3_3vbc-I5U0Myig5fA,4765 -unidecode/x0c2.py,sha256=siRYLA8Cv9Z8XsRp3WQOBdRrPkjJOuEh8z1-3SMXOzQ,4710 -unidecode/x0c3.py,sha256=hlAFe6lsz0aLMixlpeFjV4I-WTIiA3B2BU58yGlTwRg,4975 -unidecode/x0c4.py,sha256=z3xZwSkf5ru1FCdBMHOr5fyglzVdyPhQVtWjq9xInsQ,5024 -unidecode/x0c5.py,sha256=F-DR0eVMRkemOnNXOtDjI5i6gW9136XLmWM_yMVvc84,4581 -unidecode/x0c6.py,sha256=7p_jMrHf3WUa_zANms-RGVN1bAeshgWLkC16_VcSawA,4490 -unidecode/x0c7.py,sha256=5eOAq4jFsPZ-zKO7lHzAGj_EvXdaMC4Kud7gvE-B7Tg,4564 -unidecode/x0c8.py,sha256=wltKvhBgn51jULzwUnEbmyDuK9JvQpQee0uTKK42-20,4733 -unidecode/x0c9.py,sha256=GoARON07wCoHN2wRHb5fvzqE9L3Yme2hKeciynUIAIk,4722 -unidecode/x0ca.py,sha256=BsBZTNj3npIkdo3L9pSEX7XvDT68KV7wFtOOwyEb2So,5007 -unidecode/x0cb.py,sha256=8T7vnJMRmYGyySYthMWz0bgN-MremktGImjejodFeMo,5012 -unidecode/x0cc.py,sha256=GKoHN-4vL4Y3EL42G0xbN74Tgspew1oMvxQtsIa3ess,4749 -unidecode/x0cd.py,sha256=7sZ05OjugbaombMRDYOVxgstZbXMcuX5kHFheKv4W2E,4738 -unidecode/x0ce.py,sha256=mOEHFrsAwIvcTnh7OKVK5qbuXUXHfJOR7D4FtXsQmao,4708 -unidecode/x0cf.py,sha256=H9PeYcbOG68F_yc7zsELUuN05ANfFNOUX-e3-gzx7Ow,4713 -unidecode/x0d0.py,sha256=eULqcGHPmaoEdl0EwRB5wWSu8M43bp4HoFo5gGljacg,4706 -unidecode/x0d1.py,sha256=BClLDAjPgsAX6MJCsuHfmfuhH9qfzUy_vb-d9zBs3Oc,4767 -unidecode/x0d2.py,sha256=e74nqGo4E4sF1sy8qBFu2ecWoRfJdoXI1xRFRPqYEz8,4724 -unidecode/x0d3.py,sha256=8-UmvJ3-ILXo9d3GA-ReOE4OfUenL3tVUJYldZ9gHu0,4705 -unidecode/x0d4.py,sha256=fwUmzksoddTKB8fH2rZMxRK3pJtLrxhcrYpHfBauAwE,4758 -unidecode/x0d5.py,sha256=rANSL5ndzLgSgYJQNEw57AfXpicRe7pvHRlKTPb4-QQ,4680 -unidecode/x0d6.py,sha256=fT8_cRzp7y60IIhn87kM9lLehKGAg5wYmfFOwgGp6e0,4765 -unidecode/x0d7.py,sha256=0zY-KFUnKk-CuYpb1zSYj3QdS6UsfZ_lsemOuRSeDwM,4559 -unidecode/x0f9.py,sha256=2PD0_fpDnaFO9ftICjYSOhnjAfBppjsj1TcLIuYjnCI,4567 -unidecode/x0fa.py,sha256=6X94S2GbR6XOwkzx2SYynZzBMHAbRHC9GvW_vXaTDRU,4406 -unidecode/x0fb.py,sha256=qaAP_vF3_-M--wKkyb0DfBjIdnGKuk4GQLxV7fp2-_4,3838 -unidecode/x0fc.py,sha256=KcyQnyv7gxNeVcAnRwQrm4NlabZE3CrnmtLqXj_7te8,3595 -unidecode/x0fd.py,sha256=fq1BGexi73J3QPUwnL4_LZT4uh8mxYqAgMNtofbfVKE,3764 -unidecode/x0fe.py,sha256=mpt-K-jqk36iouLz5HOcthOQJczqsca9aYkEGhJ6Wk4,3825 -unidecode/x0ff.py,sha256=KGE3aIdJCR-3kAVaXOyuY44M-KfCA9UQt4B9AlEJiq0,3983 -unidecode/x1d4.py,sha256=ZS_7TAX87oGtT7b8tIlWcmeHChVINZ4W9jl9wA6JfmU,3839 -unidecode/x1d5.py,sha256=Cuh3bUzoyp8c8lJ7Y_gLmAKQ03XHMCsgTZf3uE2-G2o,3839 -unidecode/x1d6.py,sha256=6fIRGTFODh3kysq10Xr_8EmG6HZuWztLjr4vitkk8OQ,3974 -unidecode/x1d7.py,sha256=jIs9oZBMbSh5OQvPiyUI4aAdji9EbzeOXigTq4Oq_kY,3645 -unidecode/x1f1.py,sha256=CcmetFXD5Xxt9ZY0xKAjQbe16Wlq-YccWvJ_eqdzeTc,3937 diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/WHEEL b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/WHEEL deleted file mode 100644 index 8b6dd1b..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.29.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/entry_points.txt b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/entry_points.txt deleted file mode 100644 index 3016afe..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -unidecode = unidecode.util:main - diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/metadata.json b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/metadata.json deleted file mode 100644 index 64bbf15..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Text Processing", "Topic :: Text Processing :: Filters"], "extensions": {"python.commands": {"wrap_console": {"unidecode": "unidecode.util:main"}}, "python.details": {"contacts": [{"email": "tomaz.solc@tablix.org", "name": "Tomaz Solc", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst", "license": "LICENSE.txt"}}, "python.exports": {"console_scripts": {"unidecode": "unidecode.util:main"}}}, "generator": "bdist_wheel (0.29.0)", "license": "GPL", "metadata_version": "2.0", "name": "Unidecode", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "summary": "ASCII transliterations of Unicode text", "version": "1.1.1"} \ No newline at end of file diff --git a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/top_level.txt b/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/top_level.txt deleted file mode 100644 index 051b14c..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/Unidecode-1.1.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -unidecode diff --git a/blog-generator/venv/lib/python3.8/site-packages/__pycache__/easy_install.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/__pycache__/easy_install.cpython-38.pyc deleted file mode 100644 index 6b9361862ae8fc43f03c97159131fe6e58db39f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 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 z - -Blinker includes code from Louie, by Patrick K. O'Brien, Mike -C. Fletcher, and Matthew R. Scott. diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/INSTALLER b/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/LICENSE b/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/LICENSE deleted file mode 100644 index 88f6e84..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) The Blinker authors and contributors - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/METADATA b/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/METADATA deleted file mode 100644 index 25cb9f2..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/METADATA +++ /dev/null @@ -1,103 +0,0 @@ -Metadata-Version: 2.1 -Name: blinker -Version: 1.4 -Summary: Fast, simple object-to-object and broadcast signaling -Home-page: http://pythonhosted.org/blinker/ -Author: Jason Kirtland -Author-email: jek@discorporate.us -License: MIT License -Keywords: signal emit events broadcast -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.4 -Classifier: Programming Language :: Python :: 2.5 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.0 -Classifier: Programming Language :: Python :: 3.1 -Classifier: Programming Language :: Python :: 3.2 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Topic :: Software Development :: Libraries -Classifier: Topic :: Utilities - -[![Build Status](https://travis-ci.org/jek/blinker.svg?branch=master)](https://travis-ci.org/jek/blinker) - - -# Blinker - -Blinker provides a fast dispatching system that allows any number of -interested parties to subscribe to events, or "signals". - -Signal receivers can subscribe to specific senders or receive signals -sent by any sender. - - >>> from blinker import signal - >>> started = signal('round-started') - >>> def each(round): - ... print "Round %s!" % round - ... - >>> started.connect(each) - - >>> def round_two(round): - ... print "This is round two." - ... - >>> started.connect(round_two, sender=2) - - >>> for round in range(1, 4): - ... started.send(round) - ... - Round 1! - Round 2! - This is round two. - Round 3! - -See the [Blinker documentation](https://pythonhosted.org/blinker/) for more information. - -## Requirements - -Blinker requires Python 2.4 or higher, Python 3.0 or higher, or Jython 2.5 or higher. - -## Changelog Summary - -1.3 (July 3, 2013) - - - The global signal stash behind blinker.signal() is now backed by a - regular name-to-Signal dictionary. Previously, weak references were - held in the mapping and ephemeral usage in code like - ``signal('foo').connect(...)`` could have surprising program behavior - depending on import order of modules. - - blinker.Namespace is now built on a regular dict. Use - blinker.WeakNamespace for the older, weak-referencing behavior. - - Signal.connect('text-sender') uses an alternate hashing strategy to - avoid sharp edges in text identity. - -1.2 (October 26, 2011) - - - Added Signal.receiver_connected and Signal.receiver_disconnected - per-Signal signals. - - Deprecated the global 'receiver_connected' signal. - - Verified Python 3.2 support (no changes needed!) - -1.1 (July 21, 2010) - - - Added ``@signal.connect_via(sender)`` decorator - - Added ``signal.connected_to`` shorthand name for the - ``temporarily_connected_to`` context manager. - -1.0 (March 28, 2010) - - - Python 3.x compatibility - -0.9 (February 26, 2010) - - - Sphinx docs, project website - - Added ``with a_signal.temporarily_connected_to(receiver): ...`` support - - diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/RECORD b/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/RECORD deleted file mode 100644 index 517b8e9..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/RECORD +++ /dev/null @@ -1,15 +0,0 @@ -blinker-1.4.dist-info/AUTHORS,sha256=f2tPqeT2VyCL9D9YelVKScG65gDrGzbMES0zp7b0p48,207 -blinker-1.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -blinker-1.4.dist-info/LICENSE,sha256=7pmpCeGwT1Pz1JOD5kYromjPSTiLs6ZXRV2snjjN8Oo,1094 -blinker-1.4.dist-info/METADATA,sha256=xjofN2QBb0zejTtGF8S000R3eRXw5uGzdG15LjEy3ak,3308 -blinker-1.4.dist-info/RECORD,, -blinker-1.4.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92 -blinker-1.4.dist-info/top_level.txt,sha256=2NmsENM0J2t9Z8mkjxHDmGMQj7Bm8f5ZTTYe1x1fZtM,8 -blinker/__init__.py,sha256=vgkMDX61C3h5jhFvxiGJ_FCkajPLZi-KzZr_AAfV-_0,300 -blinker/__pycache__/__init__.cpython-38.pyc,, -blinker/__pycache__/_saferef.cpython-38.pyc,, -blinker/__pycache__/_utilities.cpython-38.pyc,, -blinker/__pycache__/base.cpython-38.pyc,, -blinker/_saferef.py,sha256=OprBfoWWJd791Qm9OY5c-v1bIo2qLalHah8hqAA18Sw,9223 -blinker/_utilities.py,sha256=ev0IgdfH4wMSmLO-J3gVZSc-umhhmJiQJWdQNy6lyTY,4457 -blinker/base.py,sha256=MJ_qn4ladUGMAU2M1k2OIPfgUi_INhbqfLrvjdsmHVM,16319 diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/WHEEL b/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/WHEEL deleted file mode 100644 index b552003..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.34.2) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/top_level.txt b/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/top_level.txt deleted file mode 100644 index 1ff4ca5..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker-1.4.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -blinker diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/blinker/__init__.py deleted file mode 100644 index 3ea239c..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -from blinker.base import ( - ANY, - NamedSignal, - Namespace, - Signal, - WeakNamespace, - receiver_connected, - signal, -) - -__all__ = [ - 'ANY', - 'NamedSignal', - 'Namespace', - 'Signal', - 'WeakNamespace', - 'receiver_connected', - 'signal', - ] - - -__version__ = '1.4' diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/blinker/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index aae8fa21534f782091d02d8ec5427f1d761d0c96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 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 nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -"""Refactored 'safe reference from dispatcher.py""" - -import operator -import sys -import traceback -import weakref - - -try: - callable -except NameError: - def callable(object): - return hasattr(object, '__call__') - - -if sys.version_info < (3,): - get_self = operator.attrgetter('im_self') - get_func = operator.attrgetter('im_func') -else: - get_self = operator.attrgetter('__self__') - get_func = operator.attrgetter('__func__') - - -def safe_ref(target, on_delete=None): - """Return a *safe* weak reference to a callable target. - - - ``target``: The object to be weakly referenced, if it's a bound - method reference, will create a BoundMethodWeakref, otherwise - creates a simple weakref. - - - ``on_delete``: If provided, will have a hard reference stored to - the callable to be called after the safe reference goes out of - scope with the reference object, (either a weakref or a - BoundMethodWeakref) as argument. - """ - try: - im_self = get_self(target) - except AttributeError: - if callable(on_delete): - return weakref.ref(target, on_delete) - else: - return weakref.ref(target) - else: - if im_self is not None: - # Turn a bound method into a BoundMethodWeakref instance. - # Keep track of these instances for lookup by disconnect(). - assert hasattr(target, 'im_func') or hasattr(target, '__func__'), ( - "safe_ref target %r has im_self, but no im_func, " - "don't know how to create reference" % target) - reference = BoundMethodWeakref(target=target, on_delete=on_delete) - return reference - - -class BoundMethodWeakref(object): - """'Safe' and reusable weak references to instance methods. - - BoundMethodWeakref objects provide a mechanism for referencing a - bound method without requiring that the method object itself - (which is normally a transient object) is kept alive. Instead, - the BoundMethodWeakref object keeps weak references to both the - object and the function which together define the instance method. - - Attributes: - - - ``key``: The identity key for the reference, calculated by the - class's calculate_key method applied to the target instance method. - - - ``deletion_methods``: Sequence of callable objects taking single - argument, a reference to this object which will be called when - *either* the target object or target function is garbage - collected (i.e. when this object becomes invalid). These are - specified as the on_delete parameters of safe_ref calls. - - - ``weak_self``: Weak reference to the target object. - - - ``weak_func``: Weak reference to the target function. - - Class Attributes: - - - ``_all_instances``: Class attribute pointing to all live - BoundMethodWeakref objects indexed by the class's - calculate_key(target) method applied to the target objects. - This weak value dictionary is used to short-circuit creation so - that multiple references to the same (object, function) pair - produce the same BoundMethodWeakref instance. - """ - - _all_instances = weakref.WeakValueDictionary() - - def __new__(cls, target, on_delete=None, *arguments, **named): - """Create new instance or return current instance. - - Basically this method of construction allows us to - short-circuit creation of references to already- referenced - instance methods. The key corresponding to the target is - calculated, and if there is already an existing reference, - that is returned, with its deletion_methods attribute updated. - Otherwise the new instance is created and registered in the - table of already-referenced methods. - """ - key = cls.calculate_key(target) - current = cls._all_instances.get(key) - if current is not None: - current.deletion_methods.append(on_delete) - return current - else: - base = super(BoundMethodWeakref, cls).__new__(cls) - cls._all_instances[key] = base - base.__init__(target, on_delete, *arguments, **named) - return base - - def __init__(self, target, on_delete=None): - """Return a weak-reference-like instance for a bound method. - - - ``target``: The instance-method target for the weak reference, - must have im_self and im_func attributes and be - reconstructable via the following, which is true of built-in - instance methods:: - - target.im_func.__get__( target.im_self ) - - - ``on_delete``: Optional callback which will be called when - this weak reference ceases to be valid (i.e. either the - object or the function is garbage collected). Should take a - single argument, which will be passed a pointer to this - object. - """ - def remove(weak, self=self): - """Set self.isDead to True when method or instance is destroyed.""" - methods = self.deletion_methods[:] - del self.deletion_methods[:] - try: - del self.__class__._all_instances[self.key] - except KeyError: - pass - for function in methods: - try: - if callable(function): - function(self) - except Exception: - try: - traceback.print_exc() - except AttributeError: - e = sys.exc_info()[1] - print ('Exception during saferef %s ' - 'cleanup function %s: %s' % (self, function, e)) - self.deletion_methods = [on_delete] - self.key = self.calculate_key(target) - im_self = get_self(target) - im_func = get_func(target) - self.weak_self = weakref.ref(im_self, remove) - self.weak_func = weakref.ref(im_func, remove) - self.self_name = str(im_self) - self.func_name = str(im_func.__name__) - - def calculate_key(cls, target): - """Calculate the reference key for this reference. - - Currently this is a two-tuple of the id()'s of the target - object and the target function respectively. - """ - return (id(get_self(target)), id(get_func(target))) - calculate_key = classmethod(calculate_key) - - def __str__(self): - """Give a friendly representation of the object.""" - return "%s(%s.%s)" % ( - self.__class__.__name__, - self.self_name, - self.func_name, - ) - - __repr__ = __str__ - - def __nonzero__(self): - """Whether we are still a valid reference.""" - return self() is not None - - def __cmp__(self, other): - """Compare with another reference.""" - if not isinstance(other, self.__class__): - return cmp(self.__class__, type(other)) - return cmp(self.key, other.key) - - def __call__(self): - """Return a strong reference to the bound method. - - If the target cannot be retrieved, then will return None, - otherwise returns a bound instance method for our object and - function. - - Note: You may call this method any number of times, as it does - not invalidate the reference. - """ - target = self.weak_self() - if target is not None: - function = self.weak_func() - if function is not None: - return function.__get__(target) - return None diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker/_utilities.py b/blog-generator/venv/lib/python3.8/site-packages/blinker/_utilities.py deleted file mode 100644 index 056270d..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker/_utilities.py +++ /dev/null @@ -1,163 +0,0 @@ -from weakref import ref - -from blinker._saferef import BoundMethodWeakref - - -try: - callable -except NameError: - def callable(object): - return hasattr(object, '__call__') - - -try: - from collections import defaultdict -except: - class defaultdict(dict): - - def __init__(self, default_factory=None, *a, **kw): - if (default_factory is not None and - not hasattr(default_factory, '__call__')): - raise TypeError('first argument must be callable') - dict.__init__(self, *a, **kw) - self.default_factory = default_factory - - def __getitem__(self, key): - try: - return dict.__getitem__(self, key) - except KeyError: - return self.__missing__(key) - - def __missing__(self, key): - if self.default_factory is None: - raise KeyError(key) - self[key] = value = self.default_factory() - return value - - def __reduce__(self): - if self.default_factory is None: - args = tuple() - else: - args = self.default_factory, - return type(self), args, None, None, self.items() - - def copy(self): - return self.__copy__() - - def __copy__(self): - return type(self)(self.default_factory, self) - - def __deepcopy__(self, memo): - import copy - return type(self)(self.default_factory, - copy.deepcopy(self.items())) - - def __repr__(self): - return 'defaultdict(%s, %s)' % (self.default_factory, - dict.__repr__(self)) - - -try: - from contextlib import contextmanager -except ImportError: - def contextmanager(fn): - def oops(*args, **kw): - raise RuntimeError("Python 2.5 or above is required to use " - "context managers.") - oops.__name__ = fn.__name__ - return oops - -class _symbol(object): - - def __init__(self, name): - """Construct a new named symbol.""" - self.__name__ = self.name = name - - def __reduce__(self): - return symbol, (self.name,) - - def __repr__(self): - return self.name -_symbol.__name__ = 'symbol' - - -class symbol(object): - """A constant symbol. - - >>> symbol('foo') is symbol('foo') - True - >>> symbol('foo') - foo - - A slight refinement of the MAGICCOOKIE=object() pattern. The primary - advantage of symbol() is its repr(). They are also singletons. - - Repeated calls of symbol('name') will all return the same instance. - - """ - symbols = {} - - def __new__(cls, name): - try: - return cls.symbols[name] - except KeyError: - return cls.symbols.setdefault(name, _symbol(name)) - - -try: - text = (str, unicode) -except NameError: - text = str - - -def hashable_identity(obj): - if hasattr(obj, '__func__'): - return (id(obj.__func__), id(obj.__self__)) - elif hasattr(obj, 'im_func'): - return (id(obj.im_func), id(obj.im_self)) - elif isinstance(obj, text): - return obj - else: - return id(obj) - - -WeakTypes = (ref, BoundMethodWeakref) - - -class annotatable_weakref(ref): - """A weakref.ref that supports custom instance attributes.""" - - -def reference(object, callback=None, **annotations): - """Return an annotated weak ref.""" - if callable(object): - weak = callable_reference(object, callback) - else: - weak = annotatable_weakref(object, callback) - for key, value in annotations.items(): - setattr(weak, key, value) - return weak - - -def callable_reference(object, callback=None): - """Return an annotated weak ref, supporting bound instance methods.""" - if hasattr(object, 'im_self') and object.im_self is not None: - return BoundMethodWeakref(target=object, on_delete=callback) - elif hasattr(object, '__self__') and object.__self__ is not None: - return BoundMethodWeakref(target=object, on_delete=callback) - return annotatable_weakref(object, callback) - - -class lazy_property(object): - """A @property that is only evaluated once.""" - - def __init__(self, deferred): - self._deferred = deferred - self.__doc__ = deferred.__doc__ - - def __get__(self, obj, cls): - if obj is None: - return self - value = self._deferred(obj) - setattr(obj, self._deferred.__name__, value) - return value diff --git a/blog-generator/venv/lib/python3.8/site-packages/blinker/base.py b/blog-generator/venv/lib/python3.8/site-packages/blinker/base.py deleted file mode 100644 index cc5880e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/blinker/base.py +++ /dev/null @@ -1,455 +0,0 @@ -# -*- coding: utf-8; fill-column: 76 -*- -"""Signals and events. - -A small implementation of signals, inspired by a snippet of Django signal -API client code seen in a blog post. Signals are first-class objects and -each manages its own receivers and message emission. - -The :func:`signal` function provides singleton behavior for named signals. - -""" -from warnings import warn -from weakref import WeakValueDictionary - -from blinker._utilities import ( - WeakTypes, - contextmanager, - defaultdict, - hashable_identity, - lazy_property, - reference, - symbol, - ) - - -ANY = symbol('ANY') -ANY.__doc__ = 'Token for "any sender".' -ANY_ID = 0 - - -class Signal(object): - """A notification emitter.""" - - #: An :obj:`ANY` convenience synonym, allows ``Signal.ANY`` - #: without an additional import. - ANY = ANY - - @lazy_property - def receiver_connected(self): - """Emitted after each :meth:`connect`. - - The signal sender is the signal instance, and the :meth:`connect` - arguments are passed through: *receiver*, *sender*, and *weak*. - - .. versionadded:: 1.2 - - """ - return Signal(doc="Emitted after a receiver connects.") - - @lazy_property - def receiver_disconnected(self): - """Emitted after :meth:`disconnect`. - - The sender is the signal instance, and the :meth:`disconnect` arguments - are passed through: *receiver* and *sender*. - - Note, this signal is emitted **only** when :meth:`disconnect` is - called explicitly. - - The disconnect signal can not be emitted by an automatic disconnect - (due to a weakly referenced receiver or sender going out of scope), - as the receiver and/or sender instances are no longer available for - use at the time this signal would be emitted. - - An alternative approach is available by subscribing to - :attr:`receiver_connected` and setting up a custom weakref cleanup - callback on weak receivers and senders. - - .. versionadded:: 1.2 - - """ - return Signal(doc="Emitted after a receiver disconnects.") - - def __init__(self, doc=None): - """ - :param doc: optional. If provided, will be assigned to the signal's - __doc__ attribute. - - """ - if doc: - self.__doc__ = doc - #: A mapping of connected receivers. - #: - #: The values of this mapping are not meaningful outside of the - #: internal :class:`Signal` implementation, however the boolean value - #: of the mapping is useful as an extremely efficient check to see if - #: any receivers are connected to the signal. - self.receivers = {} - self._by_receiver = defaultdict(set) - self._by_sender = defaultdict(set) - self._weak_senders = {} - - def connect(self, receiver, sender=ANY, weak=True): - """Connect *receiver* to signal events sent by *sender*. - - :param receiver: A callable. Will be invoked by :meth:`send` with - `sender=` as a single positional argument and any \*\*kwargs that - were provided to a call to :meth:`send`. - - :param sender: Any object or :obj:`ANY`, defaults to ``ANY``. - Restricts notifications delivered to *receiver* to only those - :meth:`send` emissions sent by *sender*. If ``ANY``, the receiver - will always be notified. A *receiver* may be connected to - multiple *sender* values on the same Signal through multiple calls - to :meth:`connect`. - - :param weak: If true, the Signal will hold a weakref to *receiver* - and automatically disconnect when *receiver* goes out of scope or - is garbage collected. Defaults to True. - - """ - receiver_id = hashable_identity(receiver) - if weak: - receiver_ref = reference(receiver, self._cleanup_receiver) - receiver_ref.receiver_id = receiver_id - else: - receiver_ref = receiver - if sender is ANY: - sender_id = ANY_ID - else: - sender_id = hashable_identity(sender) - - self.receivers.setdefault(receiver_id, receiver_ref) - self._by_sender[sender_id].add(receiver_id) - self._by_receiver[receiver_id].add(sender_id) - del receiver_ref - - if sender is not ANY and sender_id not in self._weak_senders: - # wire together a cleanup for weakref-able senders - try: - sender_ref = reference(sender, self._cleanup_sender) - sender_ref.sender_id = sender_id - except TypeError: - pass - else: - self._weak_senders.setdefault(sender_id, sender_ref) - del sender_ref - - # broadcast this connection. if receivers raise, disconnect. - if ('receiver_connected' in self.__dict__ and - self.receiver_connected.receivers): - try: - self.receiver_connected.send(self, - receiver=receiver, - sender=sender, - weak=weak) - except: - self.disconnect(receiver, sender) - raise - if receiver_connected.receivers and self is not receiver_connected: - try: - receiver_connected.send(self, - receiver_arg=receiver, - sender_arg=sender, - weak_arg=weak) - except: - self.disconnect(receiver, sender) - raise - return receiver - - def connect_via(self, sender, weak=False): - """Connect the decorated function as a receiver for *sender*. - - :param sender: Any object or :obj:`ANY`. The decorated function - will only receive :meth:`send` emissions sent by *sender*. If - ``ANY``, the receiver will always be notified. A function may be - decorated multiple times with differing *sender* values. - - :param weak: If true, the Signal will hold a weakref to the - decorated function and automatically disconnect when *receiver* - goes out of scope or is garbage collected. Unlike - :meth:`connect`, this defaults to False. - - The decorated function will be invoked by :meth:`send` with - `sender=` as a single positional argument and any \*\*kwargs that - were provided to the call to :meth:`send`. - - - .. versionadded:: 1.1 - - """ - def decorator(fn): - self.connect(fn, sender, weak) - return fn - return decorator - - @contextmanager - def connected_to(self, receiver, sender=ANY): - """Execute a block with the signal temporarily connected to *receiver*. - - :param receiver: a receiver callable - :param sender: optional, a sender to filter on - - This is a context manager for use in the ``with`` statement. It can - be useful in unit tests. *receiver* is connected to the signal for - the duration of the ``with`` block, and will be disconnected - automatically when exiting the block: - - .. testsetup:: - - from __future__ import with_statement - from blinker import Signal - on_ready = Signal() - receiver = lambda sender: None - - .. testcode:: - - with on_ready.connected_to(receiver): - # do stuff - on_ready.send(123) - - .. versionadded:: 1.1 - - """ - self.connect(receiver, sender=sender, weak=False) - try: - yield None - except: - self.disconnect(receiver) - raise - else: - self.disconnect(receiver) - - def temporarily_connected_to(self, receiver, sender=ANY): - """An alias for :meth:`connected_to`. - - :param receiver: a receiver callable - :param sender: optional, a sender to filter on - - .. versionadded:: 0.9 - - .. versionchanged:: 1.1 - Renamed to :meth:`connected_to`. ``temporarily_connected_to`` was - deprecated in 1.2 and will be removed in a subsequent version. - - """ - warn("temporarily_connected_to is deprecated; " - "use connected_to instead.", - DeprecationWarning) - return self.connected_to(receiver, sender) - - def send(self, *sender, **kwargs): - """Emit this signal on behalf of *sender*, passing on \*\*kwargs. - - Returns a list of 2-tuples, pairing receivers with their return - value. The ordering of receiver notification is undefined. - - :param \*sender: Any object or ``None``. If omitted, synonymous - with ``None``. Only accepts one positional argument. - - :param \*\*kwargs: Data to be sent to receivers. - - """ - # Using '*sender' rather than 'sender=None' allows 'sender' to be - # used as a keyword argument- i.e. it's an invisible name in the - # function signature. - if len(sender) == 0: - sender = None - elif len(sender) > 1: - raise TypeError('send() accepts only one positional argument, ' - '%s given' % len(sender)) - else: - sender = sender[0] - if not self.receivers: - return [] - else: - return [(receiver, receiver(sender, **kwargs)) - for receiver in self.receivers_for(sender)] - - def has_receivers_for(self, sender): - """True if there is probably a receiver for *sender*. - - Performs an optimistic check only. Does not guarantee that all - weakly referenced receivers are still alive. See - :meth:`receivers_for` for a stronger search. - - """ - if not self.receivers: - return False - if self._by_sender[ANY_ID]: - return True - if sender is ANY: - return False - return hashable_identity(sender) in self._by_sender - - def receivers_for(self, sender): - """Iterate all live receivers listening for *sender*.""" - # TODO: test receivers_for(ANY) - if self.receivers: - sender_id = hashable_identity(sender) - if sender_id in self._by_sender: - ids = (self._by_sender[ANY_ID] | - self._by_sender[sender_id]) - else: - ids = self._by_sender[ANY_ID].copy() - for receiver_id in ids: - receiver = self.receivers.get(receiver_id) - if receiver is None: - continue - if isinstance(receiver, WeakTypes): - strong = receiver() - if strong is None: - self._disconnect(receiver_id, ANY_ID) - continue - receiver = strong - yield receiver - - def disconnect(self, receiver, sender=ANY): - """Disconnect *receiver* from this signal's events. - - :param receiver: a previously :meth:`connected` callable - - :param sender: a specific sender to disconnect from, or :obj:`ANY` - to disconnect from all senders. Defaults to ``ANY``. - - """ - if sender is ANY: - sender_id = ANY_ID - else: - sender_id = hashable_identity(sender) - receiver_id = hashable_identity(receiver) - self._disconnect(receiver_id, sender_id) - - if ('receiver_disconnected' in self.__dict__ and - self.receiver_disconnected.receivers): - self.receiver_disconnected.send(self, - receiver=receiver, - sender=sender) - - def _disconnect(self, receiver_id, sender_id): - if sender_id == ANY_ID: - if self._by_receiver.pop(receiver_id, False): - for bucket in self._by_sender.values(): - bucket.discard(receiver_id) - self.receivers.pop(receiver_id, None) - else: - self._by_sender[sender_id].discard(receiver_id) - self._by_receiver[receiver_id].discard(sender_id) - - def _cleanup_receiver(self, receiver_ref): - """Disconnect a receiver from all senders.""" - self._disconnect(receiver_ref.receiver_id, ANY_ID) - - def _cleanup_sender(self, sender_ref): - """Disconnect all receivers from a sender.""" - sender_id = sender_ref.sender_id - assert sender_id != ANY_ID - self._weak_senders.pop(sender_id, None) - for receiver_id in self._by_sender.pop(sender_id, ()): - self._by_receiver[receiver_id].discard(sender_id) - - def _cleanup_bookkeeping(self): - """Prune unused sender/receiver bookeeping. Not threadsafe. - - Connecting & disconnecting leave behind a small amount of bookeeping - for the receiver and sender values. Typical workloads using Blinker, - for example in most web apps, Flask, CLI scripts, etc., are not - adversely affected by this bookkeeping. - - With a long-running Python process performing dynamic signal routing - with high volume- e.g. connecting to function closures, "senders" are - all unique object instances, and doing all of this over and over- you - may see memory usage will grow due to extraneous bookeeping. (An empty - set() for each stale sender/receiver pair.) - - This method will prune that bookeeping away, with the caveat that such - pruning is not threadsafe. The risk is that cleanup of a fully - disconnected receiver/sender pair occurs while another thread is - connecting that same pair. If you are in the highly dynamic, unique - receiver/sender situation that has lead you to this method, that - failure mode is perhaps not a big deal for you. - """ - for mapping in (self._by_sender, self._by_receiver): - for _id, bucket in list(mapping.items()): - if not bucket: - mapping.pop(_id, None) - - def _clear_state(self): - """Throw away all signal state. Useful for unit tests.""" - self._weak_senders.clear() - self.receivers.clear() - self._by_sender.clear() - self._by_receiver.clear() - - -receiver_connected = Signal("""\ -Sent by a :class:`Signal` after a receiver connects. - -:argument: the Signal that was connected to -:keyword receiver_arg: the connected receiver -:keyword sender_arg: the sender to connect to -:keyword weak_arg: true if the connection to receiver_arg is a weak reference - -.. deprecated:: 1.2 - -As of 1.2, individual signals have their own private -:attr:`~Signal.receiver_connected` and -:attr:`~Signal.receiver_disconnected` signals with a slightly simplified -call signature. This global signal is planned to be removed in 1.6. - -""") - - -class NamedSignal(Signal): - """A named generic notification emitter.""" - - def __init__(self, name, doc=None): - Signal.__init__(self, doc) - - #: The name of this signal. - self.name = name - - def __repr__(self): - base = Signal.__repr__(self) - return "%s; %r>" % (base[:-1], self.name) - - -class Namespace(dict): - """A mapping of signal names to signals.""" - - def signal(self, name, doc=None): - """Return the :class:`NamedSignal` *name*, creating it if required. - - Repeated calls to this function will return the same signal object. - - """ - try: - return self[name] - except KeyError: - return self.setdefault(name, NamedSignal(name, doc)) - - -class WeakNamespace(WeakValueDictionary): - """A weak mapping of signal names to signals. - - Automatically cleans up unused Signals when the last reference goes out - of scope. This namespace implementation exists for a measure of legacy - compatibility with Blinker <= 1.2, and may be dropped in the future. - - .. versionadded:: 1.3 - - """ - - def signal(self, name, doc=None): - """Return the :class:`NamedSignal` *name*, creating it if required. - - Repeated calls to this function will return the same signal object. - - """ - try: - return self[name] - except KeyError: - return self.setdefault(name, NamedSignal(name, doc)) - - -signal = Namespace().signal diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/__init__.py deleted file mode 100644 index 0defb82..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -try: - from ._version import version as __version__ -except ImportError: - __version__ = 'unknown' - -__all__ = ['easter', 'parser', 'relativedelta', 'rrule', 'tz', - 'utils', 'zoneinfo'] diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index c08055a336323e6a6fbce7144d3911ca69160f18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmYjLyG{c!5VW0K?zmGTN8jnko@cM9l|CaQ{wDcJ^vapWbo z3i%k7kwLE&C=(>l5IdtH3)`4=L7SErTW6KF3wJTiVj+G5k)?uIi9atytj-(nFq|Pe zjJXif7$IH=R_XGGK9B0q_}Xhf>#Udam4eykQ7JQ9w)3Y$v2ZoWp!(Wc2yJx`;=n)0 Z;<#~;zB=hU+esoucj<(dtfY*vuW#oqV8Z|a diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/_common.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/_common.cpython-38.pyc deleted file mode 100644 index 548f5eee1012e58445aae415f00c40369a247449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1395 zcmZux&2G~`5Z+xoiDQxw1gZ*L0-}J0+FW|zfGVo0g$qFvhHkc0_Ha?D&q+!lr~FR5#af+$`Rw;)Qwg1sop!iK#hZix!)mZ*vv z>}A0KPCYH1N!b_Pc}l~Uk13`DZ3c4(rmn-1(1dW3FjygVn_SV>6;l*E3ga9jHMI;n z^P4N8is1OO*^CFn=CC(hAB98D?@O_M)|E0?Ki2-~ChtT|;l*+k_kt$(v)XJ7&r^%@ zUf7E{FT*o5R+rEs9oHv#H>PeMlTQcQ7@C1@fPtV-NS~=%0+18(9nUPGKY%@wP)O4; zG6rdxb3gF3<~$?eFjW9==F6DmO9}1}o$mz!=T$gqq)DhvO}2)p&EzK*)};O;fhIO*0jfgM7>}9cW|WG8(9j z7)lG!p|l-#0k9`!P0g;SyK{IB%`1xaS}rEWasCkQHP#1_nAH5cSk64;Mmc91#n&@| zQubM8+Soh?Qu`0}P;&kVTsjlb5@B>L5yp@i;iqsAnXc}WZ@5!^F9Fg5bcLr5TLA#5 zF6fU_a@o80F55qF+2JniZ(X+c!Da1jmw%)HzkLP^Ct*6 zuaFI|!?NJ=5QnxL8wDDA1K^R`oaY}Euq&LOj=W&v0ln)Wic#JBa_ zjs-MX=kN{4nu;flf3T>g`kg3}3MaV0?dF^Gc<7=auIATH(r5-AK(3@MDk44O<;tVVhkdWL?QjJMd! zQj3Z+^Yd0R6fptSfQetG`X#vq`URNBY%~Ch=+c`YDMe hsih^EIr{NX{dxtJw>WHa^HWN5QteoPCVd8C1^^NTC#C=Z diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/easter.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/easter.cpython-38.pyc deleted file mode 100644 index 80fb71df04c9dddf71ba5b5bc68aa916002506c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2166 zcmZ`)Uvtw&5Z6iapEwSrB_ttGdXwRSbR3)fq0=xx@jwctC22{3jvs1Yd}mu&I*HRM zjv4u-^r25oKSKN1&(d$8*FO0x^r^d&orGa3jaGMiyT9Gr+ueIHH&-&?`MdS<=NLx+ z;N<*c!{h;c;WiL%Gz?C->5>NF7Ponh=eu^pA-u$`Ur8g+%>!d? z_U%dOu;+x-^LgY7>UTOqg_O~*kU}|aDp;t6qHW&`BJId7^@Q&EoOXOgnH(V5KHn{bU{6b=5WX2}97mbm{b0a&3AodOQJGWzN!QlBNgBM^e7o${h z#aJ@p9Pnm&hSN$n&C^ZzMT4hWf68UDsdCIE5I!vcQmWXAEvfq^Bn;?o6^!d@}~s} zb(NJND@zofEU&V38L*HBzS06RNBJJrJwXS)>QnAZL63&?@iSUiI;^CczNFd@AQ@A+ z)1*PUhc1gkdgx0I=_$JvI_Np=9tHeV^N59D!jUv!N>juELuUYhxF2y$JDJoRaE0VppU2E~aE~b_o)BkRK(TkQ!nZcRr1eMX(&l;4%pSxU z$~IMiULcP}dXx~8$4X#Hvop|-?WOG@q#L)t+QKky-`d$p?QDUa=i=DGBb%B5zfU1? zL;vSGcAO6(;V9`qxb8I0A{5hLQKke{B2d7Sc+QYWm>95=P&28g(foq8S|79_h|xW| z(Q2jco?D%EC0O13cy-dEPtx3_`p}Sd^uAjD7dbg)_aHm!q3`L;PmkAjr zq?-_t5GNt86VgsdFCjrfctX6t47Cop|8CW^7t{hLSdV1D+I_*-2R$L&^={aHv)%0Y zH8cQM=vj=03NJ0(QHV|&Hx@~;Y?C5^&zvUN5!;4U1{8SDJqNmQCBURuf#k<*Ue;*}6ye;iq(JX^Cc&+~cqv%5@ diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/relativedelta.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/relativedelta.cpython-38.pyc deleted file mode 100644 index f64cf664123949fa3e6bfecf180abd257dd8b400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14873 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 B+cE$E diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/rrule.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/rrule.cpython-38.pyc deleted file mode 100644 index 8fbbf0d8932dd520cfa847238d468ef9abaccd6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43478 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 TDPsn|*1yAeyD(6dun+t{Po*){ diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/tzwin.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/tzwin.cpython-38.pyc deleted file mode 100644 index ef43aef2365236b98cf00f56714feaa10a33f626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmWIL<>g`kg3}3Man?ZkF^Gc(44TX@8G%BYjJFuI z{4^P(*h;GO$}{s;G88cbg~7xxBmI)x0{w!_0^QQQg2d$P)D+$FjMUT|-Spz*LX-Hk meEpQflGM_Y%pCoaDxhY)g34PQHo5sJr8%i~Ae%n}F#`b1C?=Tz diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/utils.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/__pycache__/utils.cpython-38.pyc deleted file mode 100644 index 502227c00b32bed16eee4c9845bf366ffb3f68df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2226 zcmbVO%WfMt6rG1;D`Pt`&`mc92)95yZ6wQXiWWj^q%gYmqPDxxq7psiNQ_4_3dyl! zLtZu8{6h>BDDo}+gV}b~U+AjmQZGAjgQA2*@lu!f#d8mRvau0)7=QGC{^j>o&-;^v z+arYV0w1%FNqAjP_#(*sQP2&1T8CLU3cKN`)~!Ka6Lqoj#_!g}s%X6Nx+~&=i158C zYDZqYer2NLp)zb#h%%F`NK>f|8^~O0p0T9J&tv}z9D=lH?4N`7XtTUzuGKwl@vnuV3hos zIH($P167U8940;~&qjc6l*Bv0$82G;-aCKd-T2o&R>8!77v6ZbCa@=hx4}(-6hr<5 zCL)IMleDEq(42L~mz^Zz#&r5~e|@IqSW6>wOUc-wWJ#$tL?-wp@+>ljoJ@Pe430?Di(3*mASN;TxiT4sHKYO4bPP`+M{0Z>?)<43oyYAnh?y@?P z*0}oi`_sJoedaEWiqDFi+B+!CUrxvFLImt+RE%GI>V8 zvja~0h_<`Xxw4QcFEiVlR{YK>k-B~M{UU_ztsjq$x1O=)?zioBJHDemMv`{>uDNX& z%J$Q}_U`j$dl!FfcdzqRo1GjVJdK~RnTL33=|jyd20%+*nRzPP}A{ z8su0lD$(x?ixyES$O>dn-2fqGfGb+THOs%T(}G!Z#xJNb?h9w0ZGTEShq{h-o^#3S zEN#g2{5gVg)H0pcu~$93i-yP8Gekt* z6aQ21I-CS+-XyF+>C7)ap9E)Mkihf7E3tnybcH!tG60AW_;ZiL1t@$$8;geLESCek zkf)#tq39{4m(!U+!B6p^;K>ACXb^^cRq||F2)u+LKQ(c!8w$Hi(_U2D(^YP7nGqZMZMuSeEkXJ*guRL)oQN?e(3e8sMkwNynnLS(?qI{;vJnk(sk8y g=WaP7YS*sxjqj%aA?(vpLpM}gSr0bDXtVLzKZpTjdH?_b diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/_common.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/_common.py deleted file mode 100644 index 4eb2659..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/_common.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Common code used in multiple modules. -""" - - -class weekday(object): - __slots__ = ["weekday", "n"] - - def __init__(self, weekday, n=None): - self.weekday = weekday - self.n = n - - def __call__(self, n): - if n == self.n: - return self - else: - return self.__class__(self.weekday, n) - - def __eq__(self, other): - try: - if self.weekday != other.weekday or self.n != other.n: - return False - except AttributeError: - return False - return True - - def __hash__(self): - return hash(( - self.weekday, - self.n, - )) - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - s = ("MO", "TU", "WE", "TH", "FR", "SA", "SU")[self.weekday] - if not self.n: - return s - else: - return "%s(%+d)" % (s, self.n) - -# vim:ts=4:sw=4:et diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/_version.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/_version.py deleted file mode 100644 index eac1209..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/_version.py +++ /dev/null @@ -1,4 +0,0 @@ -# coding: utf-8 -# file generated by setuptools_scm -# don't change, don't track in version control -version = '2.8.1' diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/easter.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/easter.py deleted file mode 100644 index 53b7c78..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/easter.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers a generic easter computing method for any given year, using -Western, Orthodox or Julian algorithms. -""" - -import datetime - -__all__ = ["easter", "EASTER_JULIAN", "EASTER_ORTHODOX", "EASTER_WESTERN"] - -EASTER_JULIAN = 1 -EASTER_ORTHODOX = 2 -EASTER_WESTERN = 3 - - -def easter(year, method=EASTER_WESTERN): - """ - This method was ported from the work done by GM Arts, - on top of the algorithm by Claus Tondering, which was - based in part on the algorithm of Ouding (1940), as - quoted in "Explanatory Supplement to the Astronomical - Almanac", P. Kenneth Seidelmann, editor. - - This algorithm implements three different easter - calculation methods: - - 1 - Original calculation in Julian calendar, valid in - dates after 326 AD - 2 - Original method, with date converted to Gregorian - calendar, valid in years 1583 to 4099 - 3 - Revised method, in Gregorian calendar, valid in - years 1583 to 4099 as well - - These methods are represented by the constants: - - * ``EASTER_JULIAN = 1`` - * ``EASTER_ORTHODOX = 2`` - * ``EASTER_WESTERN = 3`` - - The default method is method 3. - - More about the algorithm may be found at: - - `GM Arts: Easter Algorithms `_ - - and - - `The Calendar FAQ: Easter `_ - - """ - - if not (1 <= method <= 3): - raise ValueError("invalid method") - - # g - Golden year - 1 - # c - Century - # h - (23 - Epact) mod 30 - # i - Number of days from March 21 to Paschal Full Moon - # j - Weekday for PFM (0=Sunday, etc) - # p - Number of days from March 21 to Sunday on or before PFM - # (-6 to 28 methods 1 & 3, to 56 for method 2) - # e - Extra days to add for method 2 (converting Julian - # date to Gregorian date) - - y = year - g = y % 19 - e = 0 - if method < 3: - # Old method - i = (19*g + 15) % 30 - j = (y + y//4 + i) % 7 - if method == 2: - # Extra dates to convert Julian to Gregorian date - e = 10 - if y > 1600: - e = e + y//100 - 16 - (y//100 - 16)//4 - else: - # New method - c = y//100 - h = (c - c//4 - (8*c + 13)//25 + 19*g + 15) % 30 - i = h - (h//28)*(1 - (h//28)*(29//(h + 1))*((21 - g)//11)) - j = (y + y//4 + i + 2 - c + c//4) % 7 - - # p can be from -6 to 56 corresponding to dates 22 March to 23 May - # (later dates apply to method 2, although 23 May never actually occurs) - p = i - j + e - d = 1 + (p + 27 + (p + 6)//40) % 31 - m = 3 + (p + 26)//30 - return datetime.date(int(y), int(m), int(d)) diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__init__.py deleted file mode 100644 index d174b0e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__init__.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -from ._parser import parse, parser, parserinfo, ParserError -from ._parser import DEFAULTPARSER, DEFAULTTZPARSER -from ._parser import UnknownTimezoneWarning - -from ._parser import __doc__ - -from .isoparser import isoparser, isoparse - -__all__ = ['parse', 'parser', 'parserinfo', - 'isoparse', 'isoparser', - 'ParserError', - 'UnknownTimezoneWarning'] - - -### -# Deprecate portions of the private interface so that downstream code that -# is improperly relying on it is given *some* notice. - - -def __deprecated_private_func(f): - from functools import wraps - import warnings - - msg = ('{name} is a private function and may break without warning, ' - 'it will be moved and or renamed in future versions.') - msg = msg.format(name=f.__name__) - - @wraps(f) - def deprecated_func(*args, **kwargs): - warnings.warn(msg, DeprecationWarning) - return f(*args, **kwargs) - - return deprecated_func - -def __deprecate_private_class(c): - import warnings - - msg = ('{name} is a private class and may break without warning, ' - 'it will be moved and or renamed in future versions.') - msg = msg.format(name=c.__name__) - - class private_class(c): - __doc__ = c.__doc__ - - def __init__(self, *args, **kwargs): - warnings.warn(msg, DeprecationWarning) - super(private_class, self).__init__(*args, **kwargs) - - private_class.__name__ = c.__name__ - - return private_class - - -from ._parser import _timelex, _resultbase -from ._parser import _tzparser, _parsetz - -_timelex = __deprecate_private_class(_timelex) -_tzparser = __deprecate_private_class(_tzparser) -_resultbase = __deprecate_private_class(_resultbase) -_parsetz = __deprecated_private_func(_parsetz) diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 72cf90deaa3a7e474c8b3e857e9a5d48ef52f735..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2047 zcmb_dOK%)S5bo}o*`4)1ZHJHq0mI|KLTn?%1<8sM6vG8sQ5=Ib2b%GAuQT>MHr=x} zS=J|8+Vz2)_yKVAAK*{$5BiFPl)r$4L{-nO?d5SmVn$t$?wabV>aTiso6RKx&oAG6 z`SouVLViW%`cnnvJ`DXc5J3b@NJ>MRvXG@t=%jAwQk-Wn?}c7k2`g52K(B^XE4v{3 zp>Jg`sin2BmM(=$pjSjy_@XA3L|ruYt6^OW^?qZ7G$jE;G%CTc17H{o=`^2ak8Q9-H<|eG--vU21ObW`|jRoIQzCIm$EnRiv^w z+lQ4Z=OXWM4sL3(&S#tXmm-5;l!L@YQb&S^pgbf#kRHZ6f6x*Qk?T)^2x_ZMPbk!b z3X-sMCY*CRr3cQG9Js>$o}SY&osv^JArm@beMfkra^|1X6EK*fq>=N#(=sB#pRrZjmCrQ1keL2?I(x&5!3qm6C>A+$k#=CT&6&=pr-T_25<&-s><8$b(1BFg#F@B|3iQ~SAG#AT4?Rf08GU%I zu6%x`HuS4QU6@`dDVFjQ+i!z1b*`{oK#|7elpQ!@I%Y4hugMNk9Wd*ah0T-iB{%fA= zm*G^@8@S^V=V>m6382+9IDa;bk`lYBHs8`TXHoWKl0c-0;S1N$o{d?(i*|_rE>-WK zY-7dQ4`A3>eOh7G4jKY26}F(=AHM0LZ2JNa`R{$Pcz)S0psMOxzB&Wq9fZs%4gM%&#Lxc=B?|wk_MR{6VefwY z3*et4vgN>zv;ip0SKURjh6InQOw49yiS2rSvn=^N+*M;nw`hkpSc7$-$r)i3-ap*B N-}YBKw8MOg@1KP~{YL-* diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/_parser.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/_parser.cpython-38.pyc deleted file mode 100644 index 75a9fbf2b5be071ae2edb3f854ebacd9716629bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40422 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 Kq@V^pnEQYKO9VCm diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/isoparser.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/__pycache__/isoparser.cpython-38.pyc deleted file mode 100644 index 65c224a211d0f4541c72eda37e35e8f38fb1af2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11154 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 diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/_parser.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/_parser.py deleted file mode 100644 index 458aa6a..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/_parser.py +++ /dev/null @@ -1,1609 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers a generic date/time string parser which is able to parse -most known formats to represent a date and/or time. - -This module attempts to be forgiving with regards to unlikely input formats, -returning a datetime object even for dates which are ambiguous. If an element -of a date/time stamp is omitted, the following rules are applied: - -- If AM or PM is left unspecified, a 24-hour clock is assumed, however, an hour - on a 12-hour clock (``0 <= hour <= 12``) *must* be specified if AM or PM is - specified. -- If a time zone is omitted, a timezone-naive datetime is returned. - -If any other elements are missing, they are taken from the -:class:`datetime.datetime` object passed to the parameter ``default``. If this -results in a day number exceeding the valid number of days per month, the -value falls back to the end of the month. - -Additional resources about date/time string formats can be found below: - -- `A summary of the international standard date and time notation - `_ -- `W3C Date and Time Formats `_ -- `Time Formats (Planetary Rings Node) `_ -- `CPAN ParseDate module - `_ -- `Java SimpleDateFormat Class - `_ -""" -from __future__ import unicode_literals - -import datetime -import re -import string -import time -import warnings - -from calendar import monthrange -from io import StringIO - -import six -from six import integer_types, text_type - -from decimal import Decimal - -from warnings import warn - -from .. import relativedelta -from .. import tz - -__all__ = ["parse", "parserinfo", "ParserError"] - - -# TODO: pandas.core.tools.datetimes imports this explicitly. Might be worth -# making public and/or figuring out if there is something we can -# take off their plate. -class _timelex(object): - # Fractional seconds are sometimes split by a comma - _split_decimal = re.compile("([.,])") - - def __init__(self, instream): - if six.PY2: - # In Python 2, we can't duck type properly because unicode has - # a 'decode' function, and we'd be double-decoding - if isinstance(instream, (bytes, bytearray)): - instream = instream.decode() - else: - if getattr(instream, 'decode', None) is not None: - instream = instream.decode() - - if isinstance(instream, text_type): - instream = StringIO(instream) - elif getattr(instream, 'read', None) is None: - raise TypeError('Parser must be a string or character stream, not ' - '{itype}'.format(itype=instream.__class__.__name__)) - - self.instream = instream - self.charstack = [] - self.tokenstack = [] - self.eof = False - - def get_token(self): - """ - This function breaks the time string into lexical units (tokens), which - can be parsed by the parser. Lexical units are demarcated by changes in - the character set, so any continuous string of letters is considered - one unit, any continuous string of numbers is considered one unit. - - The main complication arises from the fact that dots ('.') can be used - both as separators (e.g. "Sep.20.2009") or decimal points (e.g. - "4:30:21.447"). As such, it is necessary to read the full context of - any dot-separated strings before breaking it into tokens; as such, this - function maintains a "token stack", for when the ambiguous context - demands that multiple tokens be parsed at once. - """ - if self.tokenstack: - return self.tokenstack.pop(0) - - seenletters = False - token = None - state = None - - while not self.eof: - # We only realize that we've reached the end of a token when we - # find a character that's not part of the current token - since - # that character may be part of the next token, it's stored in the - # charstack. - if self.charstack: - nextchar = self.charstack.pop(0) - else: - nextchar = self.instream.read(1) - while nextchar == '\x00': - nextchar = self.instream.read(1) - - if not nextchar: - self.eof = True - break - elif not state: - # First character of the token - determines if we're starting - # to parse a word, a number or something else. - token = nextchar - if self.isword(nextchar): - state = 'a' - elif self.isnum(nextchar): - state = '0' - elif self.isspace(nextchar): - token = ' ' - break # emit token - else: - break # emit token - elif state == 'a': - # If we've already started reading a word, we keep reading - # letters until we find something that's not part of a word. - seenletters = True - if self.isword(nextchar): - token += nextchar - elif nextchar == '.': - token += nextchar - state = 'a.' - else: - self.charstack.append(nextchar) - break # emit token - elif state == '0': - # If we've already started reading a number, we keep reading - # numbers until we find something that doesn't fit. - if self.isnum(nextchar): - token += nextchar - elif nextchar == '.' or (nextchar == ',' and len(token) >= 2): - token += nextchar - state = '0.' - else: - self.charstack.append(nextchar) - break # emit token - elif state == 'a.': - # If we've seen some letters and a dot separator, continue - # parsing, and the tokens will be broken up later. - seenletters = True - if nextchar == '.' or self.isword(nextchar): - token += nextchar - elif self.isnum(nextchar) and token[-1] == '.': - token += nextchar - state = '0.' - else: - self.charstack.append(nextchar) - break # emit token - elif state == '0.': - # If we've seen at least one dot separator, keep going, we'll - # break up the tokens later. - if nextchar == '.' or self.isnum(nextchar): - token += nextchar - elif self.isword(nextchar) and token[-1] == '.': - token += nextchar - state = 'a.' - else: - self.charstack.append(nextchar) - break # emit token - - if (state in ('a.', '0.') and (seenletters or token.count('.') > 1 or - token[-1] in '.,')): - l = self._split_decimal.split(token) - token = l[0] - for tok in l[1:]: - if tok: - self.tokenstack.append(tok) - - if state == '0.' and token.count('.') == 0: - token = token.replace(',', '.') - - return token - - def __iter__(self): - return self - - def __next__(self): - token = self.get_token() - if token is None: - raise StopIteration - - return token - - def next(self): - return self.__next__() # Python 2.x support - - @classmethod - def split(cls, s): - return list(cls(s)) - - @classmethod - def isword(cls, nextchar): - """ Whether or not the next character is part of a word """ - return nextchar.isalpha() - - @classmethod - def isnum(cls, nextchar): - """ Whether the next character is part of a number """ - return nextchar.isdigit() - - @classmethod - def isspace(cls, nextchar): - """ Whether the next character is whitespace """ - return nextchar.isspace() - - -class _resultbase(object): - - def __init__(self): - for attr in self.__slots__: - setattr(self, attr, None) - - def _repr(self, classname): - l = [] - for attr in self.__slots__: - value = getattr(self, attr) - if value is not None: - l.append("%s=%s" % (attr, repr(value))) - return "%s(%s)" % (classname, ", ".join(l)) - - def __len__(self): - return (sum(getattr(self, attr) is not None - for attr in self.__slots__)) - - def __repr__(self): - return self._repr(self.__class__.__name__) - - -class parserinfo(object): - """ - Class which handles what inputs are accepted. Subclass this to customize - the language and acceptable values for each parameter. - - :param dayfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the day (``True``) or month (``False``). If - ``yearfirst`` is set to ``True``, this distinguishes between YDM - and YMD. Default is ``False``. - - :param yearfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the year. If ``True``, the first number is taken - to be the year, otherwise the last number is taken to be the year. - Default is ``False``. - """ - - # m from a.m/p.m, t from ISO T separator - JUMP = [" ", ".", ",", ";", "-", "/", "'", - "at", "on", "and", "ad", "m", "t", "of", - "st", "nd", "rd", "th"] - - WEEKDAYS = [("Mon", "Monday"), - ("Tue", "Tuesday"), # TODO: "Tues" - ("Wed", "Wednesday"), - ("Thu", "Thursday"), # TODO: "Thurs" - ("Fri", "Friday"), - ("Sat", "Saturday"), - ("Sun", "Sunday")] - MONTHS = [("Jan", "January"), - ("Feb", "February"), # TODO: "Febr" - ("Mar", "March"), - ("Apr", "April"), - ("May", "May"), - ("Jun", "June"), - ("Jul", "July"), - ("Aug", "August"), - ("Sep", "Sept", "September"), - ("Oct", "October"), - ("Nov", "November"), - ("Dec", "December")] - HMS = [("h", "hour", "hours"), - ("m", "minute", "minutes"), - ("s", "second", "seconds")] - AMPM = [("am", "a"), - ("pm", "p")] - UTCZONE = ["UTC", "GMT", "Z", "z"] - PERTAIN = ["of"] - TZOFFSET = {} - # TODO: ERA = ["AD", "BC", "CE", "BCE", "Stardate", - # "Anno Domini", "Year of Our Lord"] - - def __init__(self, dayfirst=False, yearfirst=False): - self._jump = self._convert(self.JUMP) - self._weekdays = self._convert(self.WEEKDAYS) - self._months = self._convert(self.MONTHS) - self._hms = self._convert(self.HMS) - self._ampm = self._convert(self.AMPM) - self._utczone = self._convert(self.UTCZONE) - self._pertain = self._convert(self.PERTAIN) - - self.dayfirst = dayfirst - self.yearfirst = yearfirst - - self._year = time.localtime().tm_year - self._century = self._year // 100 * 100 - - def _convert(self, lst): - dct = {} - for i, v in enumerate(lst): - if isinstance(v, tuple): - for v in v: - dct[v.lower()] = i - else: - dct[v.lower()] = i - return dct - - def jump(self, name): - return name.lower() in self._jump - - def weekday(self, name): - try: - return self._weekdays[name.lower()] - except KeyError: - pass - return None - - def month(self, name): - try: - return self._months[name.lower()] + 1 - except KeyError: - pass - return None - - def hms(self, name): - try: - return self._hms[name.lower()] - except KeyError: - return None - - def ampm(self, name): - try: - return self._ampm[name.lower()] - except KeyError: - return None - - def pertain(self, name): - return name.lower() in self._pertain - - def utczone(self, name): - return name.lower() in self._utczone - - def tzoffset(self, name): - if name in self._utczone: - return 0 - - return self.TZOFFSET.get(name) - - def convertyear(self, year, century_specified=False): - """ - Converts two-digit years to year within [-50, 49] - range of self._year (current local time) - """ - - # Function contract is that the year is always positive - assert year >= 0 - - if year < 100 and not century_specified: - # assume current century to start - year += self._century - - if year >= self._year + 50: # if too far in future - year -= 100 - elif year < self._year - 50: # if too far in past - year += 100 - - return year - - def validate(self, res): - # move to info - if res.year is not None: - res.year = self.convertyear(res.year, res.century_specified) - - if ((res.tzoffset == 0 and not res.tzname) or - (res.tzname == 'Z' or res.tzname == 'z')): - res.tzname = "UTC" - res.tzoffset = 0 - elif res.tzoffset != 0 and res.tzname and self.utczone(res.tzname): - res.tzoffset = 0 - return True - - -class _ymd(list): - def __init__(self, *args, **kwargs): - super(self.__class__, self).__init__(*args, **kwargs) - self.century_specified = False - self.dstridx = None - self.mstridx = None - self.ystridx = None - - @property - def has_year(self): - return self.ystridx is not None - - @property - def has_month(self): - return self.mstridx is not None - - @property - def has_day(self): - return self.dstridx is not None - - def could_be_day(self, value): - if self.has_day: - return False - elif not self.has_month: - return 1 <= value <= 31 - elif not self.has_year: - # Be permissive, assume leap year - month = self[self.mstridx] - return 1 <= value <= monthrange(2000, month)[1] - else: - month = self[self.mstridx] - year = self[self.ystridx] - return 1 <= value <= monthrange(year, month)[1] - - def append(self, val, label=None): - if hasattr(val, '__len__'): - if val.isdigit() and len(val) > 2: - self.century_specified = True - if label not in [None, 'Y']: # pragma: no cover - raise ValueError(label) - label = 'Y' - elif val > 100: - self.century_specified = True - if label not in [None, 'Y']: # pragma: no cover - raise ValueError(label) - label = 'Y' - - super(self.__class__, self).append(int(val)) - - if label == 'M': - if self.has_month: - raise ValueError('Month is already set') - self.mstridx = len(self) - 1 - elif label == 'D': - if self.has_day: - raise ValueError('Day is already set') - self.dstridx = len(self) - 1 - elif label == 'Y': - if self.has_year: - raise ValueError('Year is already set') - self.ystridx = len(self) - 1 - - def _resolve_from_stridxs(self, strids): - """ - Try to resolve the identities of year/month/day elements using - ystridx, mstridx, and dstridx, if enough of these are specified. - """ - if len(self) == 3 and len(strids) == 2: - # we can back out the remaining stridx value - missing = [x for x in range(3) if x not in strids.values()] - key = [x for x in ['y', 'm', 'd'] if x not in strids] - assert len(missing) == len(key) == 1 - key = key[0] - val = missing[0] - strids[key] = val - - assert len(self) == len(strids) # otherwise this should not be called - out = {key: self[strids[key]] for key in strids} - return (out.get('y'), out.get('m'), out.get('d')) - - def resolve_ymd(self, yearfirst, dayfirst): - len_ymd = len(self) - year, month, day = (None, None, None) - - strids = (('y', self.ystridx), - ('m', self.mstridx), - ('d', self.dstridx)) - - strids = {key: val for key, val in strids if val is not None} - if (len(self) == len(strids) > 0 or - (len(self) == 3 and len(strids) == 2)): - return self._resolve_from_stridxs(strids) - - mstridx = self.mstridx - - if len_ymd > 3: - raise ValueError("More than three YMD values") - elif len_ymd == 1 or (mstridx is not None and len_ymd == 2): - # One member, or two members with a month string - if mstridx is not None: - month = self[mstridx] - # since mstridx is 0 or 1, self[mstridx-1] always - # looks up the other element - other = self[mstridx - 1] - else: - other = self[0] - - if len_ymd > 1 or mstridx is None: - if other > 31: - year = other - else: - day = other - - elif len_ymd == 2: - # Two members with numbers - if self[0] > 31: - # 99-01 - year, month = self - elif self[1] > 31: - # 01-99 - month, year = self - elif dayfirst and self[1] <= 12: - # 13-01 - day, month = self - else: - # 01-13 - month, day = self - - elif len_ymd == 3: - # Three members - if mstridx == 0: - if self[1] > 31: - # Apr-2003-25 - month, year, day = self - else: - month, day, year = self - elif mstridx == 1: - if self[0] > 31 or (yearfirst and self[2] <= 31): - # 99-Jan-01 - year, month, day = self - else: - # 01-Jan-01 - # Give precedence to day-first, since - # two-digit years is usually hand-written. - day, month, year = self - - elif mstridx == 2: - # WTF!? - if self[1] > 31: - # 01-99-Jan - day, year, month = self - else: - # 99-01-Jan - year, day, month = self - - else: - if (self[0] > 31 or - self.ystridx == 0 or - (yearfirst and self[1] <= 12 and self[2] <= 31)): - # 99-01-01 - if dayfirst and self[2] <= 12: - year, day, month = self - else: - year, month, day = self - elif self[0] > 12 or (dayfirst and self[1] <= 12): - # 13-01-01 - day, month, year = self - else: - # 01-13-01 - month, day, year = self - - return year, month, day - - -class parser(object): - def __init__(self, info=None): - self.info = info or parserinfo() - - def parse(self, timestr, default=None, - ignoretz=False, tzinfos=None, **kwargs): - """ - Parse the date/time string into a :class:`datetime.datetime` object. - - :param timestr: - Any date/time string using the supported formats. - - :param default: - The default datetime object, if this is a datetime object and not - ``None``, elements specified in ``timestr`` replace elements in the - default object. - - :param ignoretz: - If set ``True``, time zones in parsed strings are ignored and a - naive :class:`datetime.datetime` object is returned. - - :param tzinfos: - Additional time zone names / aliases which may be present in the - string. This argument maps time zone names (and optionally offsets - from those time zones) to time zones. This parameter can be a - dictionary with timezone aliases mapping time zone names to time - zones or a function taking two parameters (``tzname`` and - ``tzoffset``) and returning a time zone. - - The timezones to which the names are mapped can be an integer - offset from UTC in seconds or a :class:`tzinfo` object. - - .. doctest:: - :options: +NORMALIZE_WHITESPACE - - >>> from dateutil.parser import parse - >>> from dateutil.tz import gettz - >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")} - >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos) - datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200)) - >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos) - datetime.datetime(2012, 1, 19, 17, 21, - tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago')) - - This parameter is ignored if ``ignoretz`` is set. - - :param \\*\\*kwargs: - Keyword arguments as passed to ``_parse()``. - - :return: - Returns a :class:`datetime.datetime` object or, if the - ``fuzzy_with_tokens`` option is ``True``, returns a tuple, the - first element being a :class:`datetime.datetime` object, the second - a tuple containing the fuzzy tokens. - - :raises ParserError: - Raised for invalid or unknown string format, if the provided - :class:`tzinfo` is not in a valid format, or if an invalid date - would be created. - - :raises TypeError: - Raised for non-string or character stream input. - - :raises OverflowError: - Raised if the parsed date exceeds the largest valid C integer on - your system. - """ - - if default is None: - default = datetime.datetime.now().replace(hour=0, minute=0, - second=0, microsecond=0) - - res, skipped_tokens = self._parse(timestr, **kwargs) - - if res is None: - raise ParserError("Unknown string format: %s", timestr) - - if len(res) == 0: - raise ParserError("String does not contain a date: %s", timestr) - - try: - ret = self._build_naive(res, default) - except ValueError as e: - six.raise_from(ParserError(e.args[0] + ": %s", timestr), e) - - if not ignoretz: - ret = self._build_tzaware(ret, res, tzinfos) - - if kwargs.get('fuzzy_with_tokens', False): - return ret, skipped_tokens - else: - return ret - - class _result(_resultbase): - __slots__ = ["year", "month", "day", "weekday", - "hour", "minute", "second", "microsecond", - "tzname", "tzoffset", "ampm","any_unused_tokens"] - - def _parse(self, timestr, dayfirst=None, yearfirst=None, fuzzy=False, - fuzzy_with_tokens=False): - """ - Private method which performs the heavy lifting of parsing, called from - ``parse()``, which passes on its ``kwargs`` to this function. - - :param timestr: - The string to parse. - - :param dayfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the day (``True``) or month (``False``). If - ``yearfirst`` is set to ``True``, this distinguishes between YDM - and YMD. If set to ``None``, this value is retrieved from the - current :class:`parserinfo` object (which itself defaults to - ``False``). - - :param yearfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the year. If ``True``, the first number is taken - to be the year, otherwise the last number is taken to be the year. - If this is set to ``None``, the value is retrieved from the current - :class:`parserinfo` object (which itself defaults to ``False``). - - :param fuzzy: - Whether to allow fuzzy parsing, allowing for string like "Today is - January 1, 2047 at 8:21:00AM". - - :param fuzzy_with_tokens: - If ``True``, ``fuzzy`` is automatically set to True, and the parser - will return a tuple where the first element is the parsed - :class:`datetime.datetime` datetimestamp and the second element is - a tuple containing the portions of the string which were ignored: - - .. doctest:: - - >>> from dateutil.parser import parse - >>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True) - (datetime.datetime(2047, 1, 1, 8, 21), (u'Today is ', u' ', u'at ')) - - """ - if fuzzy_with_tokens: - fuzzy = True - - info = self.info - - if dayfirst is None: - dayfirst = info.dayfirst - - if yearfirst is None: - yearfirst = info.yearfirst - - res = self._result() - l = _timelex.split(timestr) # Splits the timestr into tokens - - skipped_idxs = [] - - # year/month/day list - ymd = _ymd() - - len_l = len(l) - i = 0 - try: - while i < len_l: - - # Check if it's a number - value_repr = l[i] - try: - value = float(value_repr) - except ValueError: - value = None - - if value is not None: - # Numeric token - i = self._parse_numeric_token(l, i, info, ymd, res, fuzzy) - - # Check weekday - elif info.weekday(l[i]) is not None: - value = info.weekday(l[i]) - res.weekday = value - - # Check month name - elif info.month(l[i]) is not None: - value = info.month(l[i]) - ymd.append(value, 'M') - - if i + 1 < len_l: - if l[i + 1] in ('-', '/'): - # Jan-01[-99] - sep = l[i + 1] - ymd.append(l[i + 2]) - - if i + 3 < len_l and l[i + 3] == sep: - # Jan-01-99 - ymd.append(l[i + 4]) - i += 2 - - i += 2 - - elif (i + 4 < len_l and l[i + 1] == l[i + 3] == ' ' and - info.pertain(l[i + 2])): - # Jan of 01 - # In this case, 01 is clearly year - if l[i + 4].isdigit(): - # Convert it here to become unambiguous - value = int(l[i + 4]) - year = str(info.convertyear(value)) - ymd.append(year, 'Y') - else: - # Wrong guess - pass - # TODO: not hit in tests - i += 4 - - # Check am/pm - elif info.ampm(l[i]) is not None: - value = info.ampm(l[i]) - val_is_ampm = self._ampm_valid(res.hour, res.ampm, fuzzy) - - if val_is_ampm: - res.hour = self._adjust_ampm(res.hour, value) - res.ampm = value - - elif fuzzy: - skipped_idxs.append(i) - - # Check for a timezone name - elif self._could_be_tzname(res.hour, res.tzname, res.tzoffset, l[i]): - res.tzname = l[i] - res.tzoffset = info.tzoffset(res.tzname) - - # Check for something like GMT+3, or BRST+3. Notice - # that it doesn't mean "I am 3 hours after GMT", but - # "my time +3 is GMT". If found, we reverse the - # logic so that timezone parsing code will get it - # right. - if i + 1 < len_l and l[i + 1] in ('+', '-'): - l[i + 1] = ('+', '-')[l[i + 1] == '+'] - res.tzoffset = None - if info.utczone(res.tzname): - # With something like GMT+3, the timezone - # is *not* GMT. - res.tzname = None - - # Check for a numbered timezone - elif res.hour is not None and l[i] in ('+', '-'): - signal = (-1, 1)[l[i] == '+'] - len_li = len(l[i + 1]) - - # TODO: check that l[i + 1] is integer? - if len_li == 4: - # -0300 - hour_offset = int(l[i + 1][:2]) - min_offset = int(l[i + 1][2:]) - elif i + 2 < len_l and l[i + 2] == ':': - # -03:00 - hour_offset = int(l[i + 1]) - min_offset = int(l[i + 3]) # TODO: Check that l[i+3] is minute-like? - i += 2 - elif len_li <= 2: - # -[0]3 - hour_offset = int(l[i + 1][:2]) - min_offset = 0 - else: - raise ValueError(timestr) - - res.tzoffset = signal * (hour_offset * 3600 + min_offset * 60) - - # Look for a timezone name between parenthesis - if (i + 5 < len_l and - info.jump(l[i + 2]) and l[i + 3] == '(' and - l[i + 5] == ')' and - 3 <= len(l[i + 4]) and - self._could_be_tzname(res.hour, res.tzname, - None, l[i + 4])): - # -0300 (BRST) - res.tzname = l[i + 4] - i += 4 - - i += 1 - - # Check jumps - elif not (info.jump(l[i]) or fuzzy): - raise ValueError(timestr) - - else: - skipped_idxs.append(i) - i += 1 - - # Process year/month/day - year, month, day = ymd.resolve_ymd(yearfirst, dayfirst) - - res.century_specified = ymd.century_specified - res.year = year - res.month = month - res.day = day - - except (IndexError, ValueError): - return None, None - - if not info.validate(res): - return None, None - - if fuzzy_with_tokens: - skipped_tokens = self._recombine_skipped(l, skipped_idxs) - return res, tuple(skipped_tokens) - else: - return res, None - - def _parse_numeric_token(self, tokens, idx, info, ymd, res, fuzzy): - # Token is a number - value_repr = tokens[idx] - try: - value = self._to_decimal(value_repr) - except Exception as e: - six.raise_from(ValueError('Unknown numeric token'), e) - - len_li = len(value_repr) - - len_l = len(tokens) - - if (len(ymd) == 3 and len_li in (2, 4) and - res.hour is None and - (idx + 1 >= len_l or - (tokens[idx + 1] != ':' and - info.hms(tokens[idx + 1]) is None))): - # 19990101T23[59] - s = tokens[idx] - res.hour = int(s[:2]) - - if len_li == 4: - res.minute = int(s[2:]) - - elif len_li == 6 or (len_li > 6 and tokens[idx].find('.') == 6): - # YYMMDD or HHMMSS[.ss] - s = tokens[idx] - - if not ymd and '.' not in tokens[idx]: - ymd.append(s[:2]) - ymd.append(s[2:4]) - ymd.append(s[4:]) - else: - # 19990101T235959[.59] - - # TODO: Check if res attributes already set. - res.hour = int(s[:2]) - res.minute = int(s[2:4]) - res.second, res.microsecond = self._parsems(s[4:]) - - elif len_li in (8, 12, 14): - # YYYYMMDD - s = tokens[idx] - ymd.append(s[:4], 'Y') - ymd.append(s[4:6]) - ymd.append(s[6:8]) - - if len_li > 8: - res.hour = int(s[8:10]) - res.minute = int(s[10:12]) - - if len_li > 12: - res.second = int(s[12:]) - - elif self._find_hms_idx(idx, tokens, info, allow_jump=True) is not None: - # HH[ ]h or MM[ ]m or SS[.ss][ ]s - hms_idx = self._find_hms_idx(idx, tokens, info, allow_jump=True) - (idx, hms) = self._parse_hms(idx, tokens, info, hms_idx) - if hms is not None: - # TODO: checking that hour/minute/second are not - # already set? - self._assign_hms(res, value_repr, hms) - - elif idx + 2 < len_l and tokens[idx + 1] == ':': - # HH:MM[:SS[.ss]] - res.hour = int(value) - value = self._to_decimal(tokens[idx + 2]) # TODO: try/except for this? - (res.minute, res.second) = self._parse_min_sec(value) - - if idx + 4 < len_l and tokens[idx + 3] == ':': - res.second, res.microsecond = self._parsems(tokens[idx + 4]) - - idx += 2 - - idx += 2 - - elif idx + 1 < len_l and tokens[idx + 1] in ('-', '/', '.'): - sep = tokens[idx + 1] - ymd.append(value_repr) - - if idx + 2 < len_l and not info.jump(tokens[idx + 2]): - if tokens[idx + 2].isdigit(): - # 01-01[-01] - ymd.append(tokens[idx + 2]) - else: - # 01-Jan[-01] - value = info.month(tokens[idx + 2]) - - if value is not None: - ymd.append(value, 'M') - else: - raise ValueError() - - if idx + 3 < len_l and tokens[idx + 3] == sep: - # We have three members - value = info.month(tokens[idx + 4]) - - if value is not None: - ymd.append(value, 'M') - else: - ymd.append(tokens[idx + 4]) - idx += 2 - - idx += 1 - idx += 1 - - elif idx + 1 >= len_l or info.jump(tokens[idx + 1]): - if idx + 2 < len_l and info.ampm(tokens[idx + 2]) is not None: - # 12 am - hour = int(value) - res.hour = self._adjust_ampm(hour, info.ampm(tokens[idx + 2])) - idx += 1 - else: - # Year, month or day - ymd.append(value) - idx += 1 - - elif info.ampm(tokens[idx + 1]) is not None and (0 <= value < 24): - # 12am - hour = int(value) - res.hour = self._adjust_ampm(hour, info.ampm(tokens[idx + 1])) - idx += 1 - - elif ymd.could_be_day(value): - ymd.append(value) - - elif not fuzzy: - raise ValueError() - - return idx - - def _find_hms_idx(self, idx, tokens, info, allow_jump): - len_l = len(tokens) - - if idx+1 < len_l and info.hms(tokens[idx+1]) is not None: - # There is an "h", "m", or "s" label following this token. We take - # assign the upcoming label to the current token. - # e.g. the "12" in 12h" - hms_idx = idx + 1 - - elif (allow_jump and idx+2 < len_l and tokens[idx+1] == ' ' and - info.hms(tokens[idx+2]) is not None): - # There is a space and then an "h", "m", or "s" label. - # e.g. the "12" in "12 h" - hms_idx = idx + 2 - - elif idx > 0 and info.hms(tokens[idx-1]) is not None: - # There is a "h", "m", or "s" preceding this token. Since neither - # of the previous cases was hit, there is no label following this - # token, so we use the previous label. - # e.g. the "04" in "12h04" - hms_idx = idx-1 - - elif (1 < idx == len_l-1 and tokens[idx-1] == ' ' and - info.hms(tokens[idx-2]) is not None): - # If we are looking at the final token, we allow for a - # backward-looking check to skip over a space. - # TODO: Are we sure this is the right condition here? - hms_idx = idx - 2 - - else: - hms_idx = None - - return hms_idx - - def _assign_hms(self, res, value_repr, hms): - # See GH issue #427, fixing float rounding - value = self._to_decimal(value_repr) - - if hms == 0: - # Hour - res.hour = int(value) - if value % 1: - res.minute = int(60*(value % 1)) - - elif hms == 1: - (res.minute, res.second) = self._parse_min_sec(value) - - elif hms == 2: - (res.second, res.microsecond) = self._parsems(value_repr) - - def _could_be_tzname(self, hour, tzname, tzoffset, token): - return (hour is not None and - tzname is None and - tzoffset is None and - len(token) <= 5 and - (all(x in string.ascii_uppercase for x in token) - or token in self.info.UTCZONE)) - - def _ampm_valid(self, hour, ampm, fuzzy): - """ - For fuzzy parsing, 'a' or 'am' (both valid English words) - may erroneously trigger the AM/PM flag. Deal with that - here. - """ - val_is_ampm = True - - # If there's already an AM/PM flag, this one isn't one. - if fuzzy and ampm is not None: - val_is_ampm = False - - # If AM/PM is found and hour is not, raise a ValueError - if hour is None: - if fuzzy: - val_is_ampm = False - else: - raise ValueError('No hour specified with AM or PM flag.') - elif not 0 <= hour <= 12: - # If AM/PM is found, it's a 12 hour clock, so raise - # an error for invalid range - if fuzzy: - val_is_ampm = False - else: - raise ValueError('Invalid hour specified for 12-hour clock.') - - return val_is_ampm - - def _adjust_ampm(self, hour, ampm): - if hour < 12 and ampm == 1: - hour += 12 - elif hour == 12 and ampm == 0: - hour = 0 - return hour - - def _parse_min_sec(self, value): - # TODO: Every usage of this function sets res.second to the return - # value. Are there any cases where second will be returned as None and - # we *don't* want to set res.second = None? - minute = int(value) - second = None - - sec_remainder = value % 1 - if sec_remainder: - second = int(60 * sec_remainder) - return (minute, second) - - def _parse_hms(self, idx, tokens, info, hms_idx): - # TODO: Is this going to admit a lot of false-positives for when we - # just happen to have digits and "h", "m" or "s" characters in non-date - # text? I guess hex hashes won't have that problem, but there's plenty - # of random junk out there. - if hms_idx is None: - hms = None - new_idx = idx - elif hms_idx > idx: - hms = info.hms(tokens[hms_idx]) - new_idx = hms_idx - else: - # Looking backwards, increment one. - hms = info.hms(tokens[hms_idx]) + 1 - new_idx = idx - - return (new_idx, hms) - - # ------------------------------------------------------------------ - # Handling for individual tokens. These are kept as methods instead - # of functions for the sake of customizability via subclassing. - - def _parsems(self, value): - """Parse a I[.F] seconds value into (seconds, microseconds).""" - if "." not in value: - return int(value), 0 - else: - i, f = value.split(".") - return int(i), int(f.ljust(6, "0")[:6]) - - def _to_decimal(self, val): - try: - decimal_value = Decimal(val) - # See GH 662, edge case, infinite value should not be converted - # via `_to_decimal` - if not decimal_value.is_finite(): - raise ValueError("Converted decimal value is infinite or NaN") - except Exception as e: - msg = "Could not convert %s to decimal" % val - six.raise_from(ValueError(msg), e) - else: - return decimal_value - - # ------------------------------------------------------------------ - # Post-Parsing construction of datetime output. These are kept as - # methods instead of functions for the sake of customizability via - # subclassing. - - def _build_tzinfo(self, tzinfos, tzname, tzoffset): - if callable(tzinfos): - tzdata = tzinfos(tzname, tzoffset) - else: - tzdata = tzinfos.get(tzname) - # handle case where tzinfo is paased an options that returns None - # eg tzinfos = {'BRST' : None} - if isinstance(tzdata, datetime.tzinfo) or tzdata is None: - tzinfo = tzdata - elif isinstance(tzdata, text_type): - tzinfo = tz.tzstr(tzdata) - elif isinstance(tzdata, integer_types): - tzinfo = tz.tzoffset(tzname, tzdata) - else: - raise TypeError("Offset must be tzinfo subclass, tz string, " - "or int offset.") - return tzinfo - - def _build_tzaware(self, naive, res, tzinfos): - if (callable(tzinfos) or (tzinfos and res.tzname in tzinfos)): - tzinfo = self._build_tzinfo(tzinfos, res.tzname, res.tzoffset) - aware = naive.replace(tzinfo=tzinfo) - aware = self._assign_tzname(aware, res.tzname) - - elif res.tzname and res.tzname in time.tzname: - aware = naive.replace(tzinfo=tz.tzlocal()) - - # Handle ambiguous local datetime - aware = self._assign_tzname(aware, res.tzname) - - # This is mostly relevant for winter GMT zones parsed in the UK - if (aware.tzname() != res.tzname and - res.tzname in self.info.UTCZONE): - aware = aware.replace(tzinfo=tz.UTC) - - elif res.tzoffset == 0: - aware = naive.replace(tzinfo=tz.UTC) - - elif res.tzoffset: - aware = naive.replace(tzinfo=tz.tzoffset(res.tzname, res.tzoffset)) - - elif not res.tzname and not res.tzoffset: - # i.e. no timezone information was found. - aware = naive - - elif res.tzname: - # tz-like string was parsed but we don't know what to do - # with it - warnings.warn("tzname {tzname} identified but not understood. " - "Pass `tzinfos` argument in order to correctly " - "return a timezone-aware datetime. In a future " - "version, this will raise an " - "exception.".format(tzname=res.tzname), - category=UnknownTimezoneWarning) - aware = naive - - return aware - - def _build_naive(self, res, default): - repl = {} - for attr in ("year", "month", "day", "hour", - "minute", "second", "microsecond"): - value = getattr(res, attr) - if value is not None: - repl[attr] = value - - if 'day' not in repl: - # If the default day exceeds the last day of the month, fall back - # to the end of the month. - cyear = default.year if res.year is None else res.year - cmonth = default.month if res.month is None else res.month - cday = default.day if res.day is None else res.day - - if cday > monthrange(cyear, cmonth)[1]: - repl['day'] = monthrange(cyear, cmonth)[1] - - naive = default.replace(**repl) - - if res.weekday is not None and not res.day: - naive = naive + relativedelta.relativedelta(weekday=res.weekday) - - return naive - - def _assign_tzname(self, dt, tzname): - if dt.tzname() != tzname: - new_dt = tz.enfold(dt, fold=1) - if new_dt.tzname() == tzname: - return new_dt - - return dt - - def _recombine_skipped(self, tokens, skipped_idxs): - """ - >>> tokens = ["foo", " ", "bar", " ", "19June2000", "baz"] - >>> skipped_idxs = [0, 1, 2, 5] - >>> _recombine_skipped(tokens, skipped_idxs) - ["foo bar", "baz"] - """ - skipped_tokens = [] - for i, idx in enumerate(sorted(skipped_idxs)): - if i > 0 and idx - 1 == skipped_idxs[i - 1]: - skipped_tokens[-1] = skipped_tokens[-1] + tokens[idx] - else: - skipped_tokens.append(tokens[idx]) - - return skipped_tokens - - -DEFAULTPARSER = parser() - - -def parse(timestr, parserinfo=None, **kwargs): - """ - - Parse a string in one of the supported formats, using the - ``parserinfo`` parameters. - - :param timestr: - A string containing a date/time stamp. - - :param parserinfo: - A :class:`parserinfo` object containing parameters for the parser. - If ``None``, the default arguments to the :class:`parserinfo` - constructor are used. - - The ``**kwargs`` parameter takes the following keyword arguments: - - :param default: - The default datetime object, if this is a datetime object and not - ``None``, elements specified in ``timestr`` replace elements in the - default object. - - :param ignoretz: - If set ``True``, time zones in parsed strings are ignored and a naive - :class:`datetime` object is returned. - - :param tzinfos: - Additional time zone names / aliases which may be present in the - string. This argument maps time zone names (and optionally offsets - from those time zones) to time zones. This parameter can be a - dictionary with timezone aliases mapping time zone names to time - zones or a function taking two parameters (``tzname`` and - ``tzoffset``) and returning a time zone. - - The timezones to which the names are mapped can be an integer - offset from UTC in seconds or a :class:`tzinfo` object. - - .. doctest:: - :options: +NORMALIZE_WHITESPACE - - >>> from dateutil.parser import parse - >>> from dateutil.tz import gettz - >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")} - >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos) - datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200)) - >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos) - datetime.datetime(2012, 1, 19, 17, 21, - tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago')) - - This parameter is ignored if ``ignoretz`` is set. - - :param dayfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the day (``True``) or month (``False``). If - ``yearfirst`` is set to ``True``, this distinguishes between YDM and - YMD. If set to ``None``, this value is retrieved from the current - :class:`parserinfo` object (which itself defaults to ``False``). - - :param yearfirst: - Whether to interpret the first value in an ambiguous 3-integer date - (e.g. 01/05/09) as the year. If ``True``, the first number is taken to - be the year, otherwise the last number is taken to be the year. If - this is set to ``None``, the value is retrieved from the current - :class:`parserinfo` object (which itself defaults to ``False``). - - :param fuzzy: - Whether to allow fuzzy parsing, allowing for string like "Today is - January 1, 2047 at 8:21:00AM". - - :param fuzzy_with_tokens: - If ``True``, ``fuzzy`` is automatically set to True, and the parser - will return a tuple where the first element is the parsed - :class:`datetime.datetime` datetimestamp and the second element is - a tuple containing the portions of the string which were ignored: - - .. doctest:: - - >>> from dateutil.parser import parse - >>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True) - (datetime.datetime(2047, 1, 1, 8, 21), (u'Today is ', u' ', u'at ')) - - :return: - Returns a :class:`datetime.datetime` object or, if the - ``fuzzy_with_tokens`` option is ``True``, returns a tuple, the - first element being a :class:`datetime.datetime` object, the second - a tuple containing the fuzzy tokens. - - :raises ValueError: - Raised for invalid or unknown string format, if the provided - :class:`tzinfo` is not in a valid format, or if an invalid date - would be created. - - :raises OverflowError: - Raised if the parsed date exceeds the largest valid C integer on - your system. - """ - if parserinfo: - return parser(parserinfo).parse(timestr, **kwargs) - else: - return DEFAULTPARSER.parse(timestr, **kwargs) - - -class _tzparser(object): - - class _result(_resultbase): - - __slots__ = ["stdabbr", "stdoffset", "dstabbr", "dstoffset", - "start", "end"] - - class _attr(_resultbase): - __slots__ = ["month", "week", "weekday", - "yday", "jyday", "day", "time"] - - def __repr__(self): - return self._repr("") - - def __init__(self): - _resultbase.__init__(self) - self.start = self._attr() - self.end = self._attr() - - def parse(self, tzstr): - res = self._result() - l = [x for x in re.split(r'([,:.]|[a-zA-Z]+|[0-9]+)',tzstr) if x] - used_idxs = list() - try: - - len_l = len(l) - - i = 0 - while i < len_l: - # BRST+3[BRDT[+2]] - j = i - while j < len_l and not [x for x in l[j] - if x in "0123456789:,-+"]: - j += 1 - if j != i: - if not res.stdabbr: - offattr = "stdoffset" - res.stdabbr = "".join(l[i:j]) - else: - offattr = "dstoffset" - res.dstabbr = "".join(l[i:j]) - - for ii in range(j): - used_idxs.append(ii) - i = j - if (i < len_l and (l[i] in ('+', '-') or l[i][0] in - "0123456789")): - if l[i] in ('+', '-'): - # Yes, that's right. See the TZ variable - # documentation. - signal = (1, -1)[l[i] == '+'] - used_idxs.append(i) - i += 1 - else: - signal = -1 - len_li = len(l[i]) - if len_li == 4: - # -0300 - setattr(res, offattr, (int(l[i][:2]) * 3600 + - int(l[i][2:]) * 60) * signal) - elif i + 1 < len_l and l[i + 1] == ':': - # -03:00 - setattr(res, offattr, - (int(l[i]) * 3600 + - int(l[i + 2]) * 60) * signal) - used_idxs.append(i) - i += 2 - elif len_li <= 2: - # -[0]3 - setattr(res, offattr, - int(l[i][:2]) * 3600 * signal) - else: - return None - used_idxs.append(i) - i += 1 - if res.dstabbr: - break - else: - break - - - if i < len_l: - for j in range(i, len_l): - if l[j] == ';': - l[j] = ',' - - assert l[i] == ',' - - i += 1 - - if i >= len_l: - pass - elif (8 <= l.count(',') <= 9 and - not [y for x in l[i:] if x != ',' - for y in x if y not in "0123456789+-"]): - # GMT0BST,3,0,30,3600,10,0,26,7200[,3600] - for x in (res.start, res.end): - x.month = int(l[i]) - used_idxs.append(i) - i += 2 - if l[i] == '-': - value = int(l[i + 1]) * -1 - used_idxs.append(i) - i += 1 - else: - value = int(l[i]) - used_idxs.append(i) - i += 2 - if value: - x.week = value - x.weekday = (int(l[i]) - 1) % 7 - else: - x.day = int(l[i]) - used_idxs.append(i) - i += 2 - x.time = int(l[i]) - used_idxs.append(i) - i += 2 - if i < len_l: - if l[i] in ('-', '+'): - signal = (-1, 1)[l[i] == "+"] - used_idxs.append(i) - i += 1 - else: - signal = 1 - used_idxs.append(i) - res.dstoffset = (res.stdoffset + int(l[i]) * signal) - - # This was a made-up format that is not in normal use - warn(('Parsed time zone "%s"' % tzstr) + - 'is in a non-standard dateutil-specific format, which ' + - 'is now deprecated; support for parsing this format ' + - 'will be removed in future versions. It is recommended ' + - 'that you switch to a standard format like the GNU ' + - 'TZ variable format.', tz.DeprecatedTzFormatWarning) - elif (l.count(',') == 2 and l[i:].count('/') <= 2 and - not [y for x in l[i:] if x not in (',', '/', 'J', 'M', - '.', '-', ':') - for y in x if y not in "0123456789"]): - for x in (res.start, res.end): - if l[i] == 'J': - # non-leap year day (1 based) - used_idxs.append(i) - i += 1 - x.jyday = int(l[i]) - elif l[i] == 'M': - # month[-.]week[-.]weekday - used_idxs.append(i) - i += 1 - x.month = int(l[i]) - used_idxs.append(i) - i += 1 - assert l[i] in ('-', '.') - used_idxs.append(i) - i += 1 - x.week = int(l[i]) - if x.week == 5: - x.week = -1 - used_idxs.append(i) - i += 1 - assert l[i] in ('-', '.') - used_idxs.append(i) - i += 1 - x.weekday = (int(l[i]) - 1) % 7 - else: - # year day (zero based) - x.yday = int(l[i]) + 1 - - used_idxs.append(i) - i += 1 - - if i < len_l and l[i] == '/': - used_idxs.append(i) - i += 1 - # start time - len_li = len(l[i]) - if len_li == 4: - # -0300 - x.time = (int(l[i][:2]) * 3600 + - int(l[i][2:]) * 60) - elif i + 1 < len_l and l[i + 1] == ':': - # -03:00 - x.time = int(l[i]) * 3600 + int(l[i + 2]) * 60 - used_idxs.append(i) - i += 2 - if i + 1 < len_l and l[i + 1] == ':': - used_idxs.append(i) - i += 2 - x.time += int(l[i]) - elif len_li <= 2: - # -[0]3 - x.time = (int(l[i][:2]) * 3600) - else: - return None - used_idxs.append(i) - i += 1 - - assert i == len_l or l[i] == ',' - - i += 1 - - assert i >= len_l - - except (IndexError, ValueError, AssertionError): - return None - - unused_idxs = set(range(len_l)).difference(used_idxs) - res.any_unused_tokens = not {l[n] for n in unused_idxs}.issubset({",",":"}) - return res - - -DEFAULTTZPARSER = _tzparser() - - -def _parsetz(tzstr): - return DEFAULTTZPARSER.parse(tzstr) - - -class ParserError(ValueError): - """Error class for representing failure to parse a datetime string.""" - def __str__(self): - try: - return self.args[0] % self.args[1:] - except (TypeError, IndexError): - return super(ParserError, self).__str__() - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, str(self)) - - -class UnknownTimezoneWarning(RuntimeWarning): - """Raised when the parser finds a timezone it cannot parse into a tzinfo""" -# vim:ts=4:sw=4:et diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/isoparser.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/isoparser.py deleted file mode 100644 index 48f86a3..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/parser/isoparser.py +++ /dev/null @@ -1,411 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers a parser for ISO-8601 strings - -It is intended to support all valid date, time and datetime formats per the -ISO-8601 specification. - -..versionadded:: 2.7.0 -""" -from datetime import datetime, timedelta, time, date -import calendar -from dateutil import tz - -from functools import wraps - -import re -import six - -__all__ = ["isoparse", "isoparser"] - - -def _takes_ascii(f): - @wraps(f) - def func(self, str_in, *args, **kwargs): - # If it's a stream, read the whole thing - str_in = getattr(str_in, 'read', lambda: str_in)() - - # If it's unicode, turn it into bytes, since ISO-8601 only covers ASCII - if isinstance(str_in, six.text_type): - # ASCII is the same in UTF-8 - try: - str_in = str_in.encode('ascii') - except UnicodeEncodeError as e: - msg = 'ISO-8601 strings should contain only ASCII characters' - six.raise_from(ValueError(msg), e) - - return f(self, str_in, *args, **kwargs) - - return func - - -class isoparser(object): - def __init__(self, sep=None): - """ - :param sep: - A single character that separates date and time portions. If - ``None``, the parser will accept any single character. - For strict ISO-8601 adherence, pass ``'T'``. - """ - if sep is not None: - if (len(sep) != 1 or ord(sep) >= 128 or sep in '0123456789'): - raise ValueError('Separator must be a single, non-numeric ' + - 'ASCII character') - - sep = sep.encode('ascii') - - self._sep = sep - - @_takes_ascii - def isoparse(self, dt_str): - """ - Parse an ISO-8601 datetime string into a :class:`datetime.datetime`. - - An ISO-8601 datetime string consists of a date portion, followed - optionally by a time portion - the date and time portions are separated - by a single character separator, which is ``T`` in the official - standard. Incomplete date formats (such as ``YYYY-MM``) may *not* be - combined with a time portion. - - Supported date formats are: - - Common: - - - ``YYYY`` - - ``YYYY-MM`` or ``YYYYMM`` - - ``YYYY-MM-DD`` or ``YYYYMMDD`` - - Uncommon: - - - ``YYYY-Www`` or ``YYYYWww`` - ISO week (day defaults to 0) - - ``YYYY-Www-D`` or ``YYYYWwwD`` - ISO week and day - - The ISO week and day numbering follows the same logic as - :func:`datetime.date.isocalendar`. - - Supported time formats are: - - - ``hh`` - - ``hh:mm`` or ``hhmm`` - - ``hh:mm:ss`` or ``hhmmss`` - - ``hh:mm:ss.ssssss`` (Up to 6 sub-second digits) - - Midnight is a special case for `hh`, as the standard supports both - 00:00 and 24:00 as a representation. The decimal separator can be - either a dot or a comma. - - - .. caution:: - - Support for fractional components other than seconds is part of the - ISO-8601 standard, but is not currently implemented in this parser. - - Supported time zone offset formats are: - - - `Z` (UTC) - - `±HH:MM` - - `±HHMM` - - `±HH` - - Offsets will be represented as :class:`dateutil.tz.tzoffset` objects, - with the exception of UTC, which will be represented as - :class:`dateutil.tz.tzutc`. Time zone offsets equivalent to UTC (such - as `+00:00`) will also be represented as :class:`dateutil.tz.tzutc`. - - :param dt_str: - A string or stream containing only an ISO-8601 datetime string - - :return: - Returns a :class:`datetime.datetime` representing the string. - Unspecified components default to their lowest value. - - .. warning:: - - As of version 2.7.0, the strictness of the parser should not be - considered a stable part of the contract. Any valid ISO-8601 string - that parses correctly with the default settings will continue to - parse correctly in future versions, but invalid strings that - currently fail (e.g. ``2017-01-01T00:00+00:00:00``) are not - guaranteed to continue failing in future versions if they encode - a valid date. - - .. versionadded:: 2.7.0 - """ - components, pos = self._parse_isodate(dt_str) - - if len(dt_str) > pos: - if self._sep is None or dt_str[pos:pos + 1] == self._sep: - components += self._parse_isotime(dt_str[pos + 1:]) - else: - raise ValueError('String contains unknown ISO components') - - if len(components) > 3 and components[3] == 24: - components[3] = 0 - return datetime(*components) + timedelta(days=1) - - return datetime(*components) - - @_takes_ascii - def parse_isodate(self, datestr): - """ - Parse the date portion of an ISO string. - - :param datestr: - The string portion of an ISO string, without a separator - - :return: - Returns a :class:`datetime.date` object - """ - components, pos = self._parse_isodate(datestr) - if pos < len(datestr): - raise ValueError('String contains unknown ISO ' + - 'components: {}'.format(datestr)) - return date(*components) - - @_takes_ascii - def parse_isotime(self, timestr): - """ - Parse the time portion of an ISO string. - - :param timestr: - The time portion of an ISO string, without a separator - - :return: - Returns a :class:`datetime.time` object - """ - components = self._parse_isotime(timestr) - if components[0] == 24: - components[0] = 0 - return time(*components) - - @_takes_ascii - def parse_tzstr(self, tzstr, zero_as_utc=True): - """ - Parse a valid ISO time zone string. - - See :func:`isoparser.isoparse` for details on supported formats. - - :param tzstr: - A string representing an ISO time zone offset - - :param zero_as_utc: - Whether to return :class:`dateutil.tz.tzutc` for zero-offset zones - - :return: - Returns :class:`dateutil.tz.tzoffset` for offsets and - :class:`dateutil.tz.tzutc` for ``Z`` and (if ``zero_as_utc`` is - specified) offsets equivalent to UTC. - """ - return self._parse_tzstr(tzstr, zero_as_utc=zero_as_utc) - - # Constants - _DATE_SEP = b'-' - _TIME_SEP = b':' - _FRACTION_REGEX = re.compile(b'[\\.,]([0-9]+)') - - def _parse_isodate(self, dt_str): - try: - return self._parse_isodate_common(dt_str) - except ValueError: - return self._parse_isodate_uncommon(dt_str) - - def _parse_isodate_common(self, dt_str): - len_str = len(dt_str) - components = [1, 1, 1] - - if len_str < 4: - raise ValueError('ISO string too short') - - # Year - components[0] = int(dt_str[0:4]) - pos = 4 - if pos >= len_str: - return components, pos - - has_sep = dt_str[pos:pos + 1] == self._DATE_SEP - if has_sep: - pos += 1 - - # Month - if len_str - pos < 2: - raise ValueError('Invalid common month') - - components[1] = int(dt_str[pos:pos + 2]) - pos += 2 - - if pos >= len_str: - if has_sep: - return components, pos - else: - raise ValueError('Invalid ISO format') - - if has_sep: - if dt_str[pos:pos + 1] != self._DATE_SEP: - raise ValueError('Invalid separator in ISO string') - pos += 1 - - # Day - if len_str - pos < 2: - raise ValueError('Invalid common day') - components[2] = int(dt_str[pos:pos + 2]) - return components, pos + 2 - - def _parse_isodate_uncommon(self, dt_str): - if len(dt_str) < 4: - raise ValueError('ISO string too short') - - # All ISO formats start with the year - year = int(dt_str[0:4]) - - has_sep = dt_str[4:5] == self._DATE_SEP - - pos = 4 + has_sep # Skip '-' if it's there - if dt_str[pos:pos + 1] == b'W': - # YYYY-?Www-?D? - pos += 1 - weekno = int(dt_str[pos:pos + 2]) - pos += 2 - - dayno = 1 - if len(dt_str) > pos: - if (dt_str[pos:pos + 1] == self._DATE_SEP) != has_sep: - raise ValueError('Inconsistent use of dash separator') - - pos += has_sep - - dayno = int(dt_str[pos:pos + 1]) - pos += 1 - - base_date = self._calculate_weekdate(year, weekno, dayno) - else: - # YYYYDDD or YYYY-DDD - if len(dt_str) - pos < 3: - raise ValueError('Invalid ordinal day') - - ordinal_day = int(dt_str[pos:pos + 3]) - pos += 3 - - if ordinal_day < 1 or ordinal_day > (365 + calendar.isleap(year)): - raise ValueError('Invalid ordinal day' + - ' {} for year {}'.format(ordinal_day, year)) - - base_date = date(year, 1, 1) + timedelta(days=ordinal_day - 1) - - components = [base_date.year, base_date.month, base_date.day] - return components, pos - - def _calculate_weekdate(self, year, week, day): - """ - Calculate the day of corresponding to the ISO year-week-day calendar. - - This function is effectively the inverse of - :func:`datetime.date.isocalendar`. - - :param year: - The year in the ISO calendar - - :param week: - The week in the ISO calendar - range is [1, 53] - - :param day: - The day in the ISO calendar - range is [1 (MON), 7 (SUN)] - - :return: - Returns a :class:`datetime.date` - """ - if not 0 < week < 54: - raise ValueError('Invalid week: {}'.format(week)) - - if not 0 < day < 8: # Range is 1-7 - raise ValueError('Invalid weekday: {}'.format(day)) - - # Get week 1 for the specific year: - jan_4 = date(year, 1, 4) # Week 1 always has January 4th in it - week_1 = jan_4 - timedelta(days=jan_4.isocalendar()[2] - 1) - - # Now add the specific number of weeks and days to get what we want - week_offset = (week - 1) * 7 + (day - 1) - return week_1 + timedelta(days=week_offset) - - def _parse_isotime(self, timestr): - len_str = len(timestr) - components = [0, 0, 0, 0, None] - pos = 0 - comp = -1 - - if len(timestr) < 2: - raise ValueError('ISO time too short') - - has_sep = len_str >= 3 and timestr[2:3] == self._TIME_SEP - - while pos < len_str and comp < 5: - comp += 1 - - if timestr[pos:pos + 1] in b'-+Zz': - # Detect time zone boundary - components[-1] = self._parse_tzstr(timestr[pos:]) - pos = len_str - break - - if comp < 3: - # Hour, minute, second - components[comp] = int(timestr[pos:pos + 2]) - pos += 2 - if (has_sep and pos < len_str and - timestr[pos:pos + 1] == self._TIME_SEP): - pos += 1 - - if comp == 3: - # Fraction of a second - frac = self._FRACTION_REGEX.match(timestr[pos:]) - if not frac: - continue - - us_str = frac.group(1)[:6] # Truncate to microseconds - components[comp] = int(us_str) * 10**(6 - len(us_str)) - pos += len(frac.group()) - - if pos < len_str: - raise ValueError('Unused components in ISO string') - - if components[0] == 24: - # Standard supports 00:00 and 24:00 as representations of midnight - if any(component != 0 for component in components[1:4]): - raise ValueError('Hour may only be 24 at 24:00:00.000') - - return components - - def _parse_tzstr(self, tzstr, zero_as_utc=True): - if tzstr == b'Z' or tzstr == b'z': - return tz.UTC - - if len(tzstr) not in {3, 5, 6}: - raise ValueError('Time zone offset must be 1, 3, 5 or 6 characters') - - if tzstr[0:1] == b'-': - mult = -1 - elif tzstr[0:1] == b'+': - mult = 1 - else: - raise ValueError('Time zone offset requires sign') - - hours = int(tzstr[1:3]) - if len(tzstr) == 3: - minutes = 0 - else: - minutes = int(tzstr[(4 if tzstr[3:4] == self._TIME_SEP else 3):]) - - if zero_as_utc and hours == 0 and minutes == 0: - return tz.UTC - else: - if minutes > 59: - raise ValueError('Invalid minutes in time zone offset') - - if hours > 23: - raise ValueError('Invalid hours in time zone offset') - - return tz.tzoffset(None, mult * (hours * 60 + minutes) * 60) - - -DEFAULT_ISOPARSER = isoparser() -isoparse = DEFAULT_ISOPARSER.isoparse diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/relativedelta.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/relativedelta.py deleted file mode 100644 index a9e85f7..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/relativedelta.py +++ /dev/null @@ -1,599 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -import calendar - -import operator -from math import copysign - -from six import integer_types -from warnings import warn - -from ._common import weekday - -MO, TU, WE, TH, FR, SA, SU = weekdays = tuple(weekday(x) for x in range(7)) - -__all__ = ["relativedelta", "MO", "TU", "WE", "TH", "FR", "SA", "SU"] - - -class relativedelta(object): - """ - The relativedelta type is designed to be applied to an existing datetime and - can replace specific components of that datetime, or represents an interval - of time. - - It is based on the specification of the excellent work done by M.-A. Lemburg - in his - `mx.DateTime `_ extension. - However, notice that this type does *NOT* implement the same algorithm as - his work. Do *NOT* expect it to behave like mx.DateTime's counterpart. - - There are two different ways to build a relativedelta instance. The - first one is passing it two date/datetime classes:: - - relativedelta(datetime1, datetime2) - - The second one is passing it any number of the following keyword arguments:: - - relativedelta(arg1=x,arg2=y,arg3=z...) - - year, month, day, hour, minute, second, microsecond: - Absolute information (argument is singular); adding or subtracting a - relativedelta with absolute information does not perform an arithmetic - operation, but rather REPLACES the corresponding value in the - original datetime with the value(s) in relativedelta. - - years, months, weeks, days, hours, minutes, seconds, microseconds: - Relative information, may be negative (argument is plural); adding - or subtracting a relativedelta with relative information performs - the corresponding arithmetic operation on the original datetime value - with the information in the relativedelta. - - weekday: - One of the weekday instances (MO, TU, etc) available in the - relativedelta module. These instances may receive a parameter N, - specifying the Nth weekday, which could be positive or negative - (like MO(+1) or MO(-2)). Not specifying it is the same as specifying - +1. You can also use an integer, where 0=MO. This argument is always - relative e.g. if the calculated date is already Monday, using MO(1) - or MO(-1) won't change the day. To effectively make it absolute, use - it in combination with the day argument (e.g. day=1, MO(1) for first - Monday of the month). - - leapdays: - Will add given days to the date found, if year is a leap - year, and the date found is post 28 of february. - - yearday, nlyearday: - Set the yearday or the non-leap year day (jump leap days). - These are converted to day/month/leapdays information. - - There are relative and absolute forms of the keyword - arguments. The plural is relative, and the singular is - absolute. For each argument in the order below, the absolute form - is applied first (by setting each attribute to that value) and - then the relative form (by adding the value to the attribute). - - The order of attributes considered when this relativedelta is - added to a datetime is: - - 1. Year - 2. Month - 3. Day - 4. Hours - 5. Minutes - 6. Seconds - 7. Microseconds - - Finally, weekday is applied, using the rule described above. - - For example - - >>> from datetime import datetime - >>> from dateutil.relativedelta import relativedelta, MO - >>> dt = datetime(2018, 4, 9, 13, 37, 0) - >>> delta = relativedelta(hours=25, day=1, weekday=MO(1)) - >>> dt + delta - datetime.datetime(2018, 4, 2, 14, 37) - - First, the day is set to 1 (the first of the month), then 25 hours - are added, to get to the 2nd day and 14th hour, finally the - weekday is applied, but since the 2nd is already a Monday there is - no effect. - - """ - - def __init__(self, dt1=None, dt2=None, - years=0, months=0, days=0, leapdays=0, weeks=0, - hours=0, minutes=0, seconds=0, microseconds=0, - year=None, month=None, day=None, weekday=None, - yearday=None, nlyearday=None, - hour=None, minute=None, second=None, microsecond=None): - - if dt1 and dt2: - # datetime is a subclass of date. So both must be date - if not (isinstance(dt1, datetime.date) and - isinstance(dt2, datetime.date)): - raise TypeError("relativedelta only diffs datetime/date") - - # We allow two dates, or two datetimes, so we coerce them to be - # of the same type - if (isinstance(dt1, datetime.datetime) != - isinstance(dt2, datetime.datetime)): - if not isinstance(dt1, datetime.datetime): - dt1 = datetime.datetime.fromordinal(dt1.toordinal()) - elif not isinstance(dt2, datetime.datetime): - dt2 = datetime.datetime.fromordinal(dt2.toordinal()) - - self.years = 0 - self.months = 0 - self.days = 0 - self.leapdays = 0 - self.hours = 0 - self.minutes = 0 - self.seconds = 0 - self.microseconds = 0 - self.year = None - self.month = None - self.day = None - self.weekday = None - self.hour = None - self.minute = None - self.second = None - self.microsecond = None - self._has_time = 0 - - # Get year / month delta between the two - months = (dt1.year - dt2.year) * 12 + (dt1.month - dt2.month) - self._set_months(months) - - # Remove the year/month delta so the timedelta is just well-defined - # time units (seconds, days and microseconds) - dtm = self.__radd__(dt2) - - # If we've overshot our target, make an adjustment - if dt1 < dt2: - compare = operator.gt - increment = 1 - else: - compare = operator.lt - increment = -1 - - while compare(dt1, dtm): - months += increment - self._set_months(months) - dtm = self.__radd__(dt2) - - # Get the timedelta between the "months-adjusted" date and dt1 - delta = dt1 - dtm - self.seconds = delta.seconds + delta.days * 86400 - self.microseconds = delta.microseconds - else: - # Check for non-integer values in integer-only quantities - if any(x is not None and x != int(x) for x in (years, months)): - raise ValueError("Non-integer years and months are " - "ambiguous and not currently supported.") - - # Relative information - self.years = int(years) - self.months = int(months) - self.days = days + weeks * 7 - self.leapdays = leapdays - self.hours = hours - self.minutes = minutes - self.seconds = seconds - self.microseconds = microseconds - - # Absolute information - self.year = year - self.month = month - self.day = day - self.hour = hour - self.minute = minute - self.second = second - self.microsecond = microsecond - - if any(x is not None and int(x) != x - for x in (year, month, day, hour, - minute, second, microsecond)): - # For now we'll deprecate floats - later it'll be an error. - warn("Non-integer value passed as absolute information. " + - "This is not a well-defined condition and will raise " + - "errors in future versions.", DeprecationWarning) - - if isinstance(weekday, integer_types): - self.weekday = weekdays[weekday] - else: - self.weekday = weekday - - yday = 0 - if nlyearday: - yday = nlyearday - elif yearday: - yday = yearday - if yearday > 59: - self.leapdays = -1 - if yday: - ydayidx = [31, 59, 90, 120, 151, 181, 212, - 243, 273, 304, 334, 366] - for idx, ydays in enumerate(ydayidx): - if yday <= ydays: - self.month = idx+1 - if idx == 0: - self.day = yday - else: - self.day = yday-ydayidx[idx-1] - break - else: - raise ValueError("invalid year day (%d)" % yday) - - self._fix() - - def _fix(self): - if abs(self.microseconds) > 999999: - s = _sign(self.microseconds) - div, mod = divmod(self.microseconds * s, 1000000) - self.microseconds = mod * s - self.seconds += div * s - if abs(self.seconds) > 59: - s = _sign(self.seconds) - div, mod = divmod(self.seconds * s, 60) - self.seconds = mod * s - self.minutes += div * s - if abs(self.minutes) > 59: - s = _sign(self.minutes) - div, mod = divmod(self.minutes * s, 60) - self.minutes = mod * s - self.hours += div * s - if abs(self.hours) > 23: - s = _sign(self.hours) - div, mod = divmod(self.hours * s, 24) - self.hours = mod * s - self.days += div * s - if abs(self.months) > 11: - s = _sign(self.months) - div, mod = divmod(self.months * s, 12) - self.months = mod * s - self.years += div * s - if (self.hours or self.minutes or self.seconds or self.microseconds - or self.hour is not None or self.minute is not None or - self.second is not None or self.microsecond is not None): - self._has_time = 1 - else: - self._has_time = 0 - - @property - def weeks(self): - return int(self.days / 7.0) - - @weeks.setter - def weeks(self, value): - self.days = self.days - (self.weeks * 7) + value * 7 - - def _set_months(self, months): - self.months = months - if abs(self.months) > 11: - s = _sign(self.months) - div, mod = divmod(self.months * s, 12) - self.months = mod * s - self.years = div * s - else: - self.years = 0 - - def normalized(self): - """ - Return a version of this object represented entirely using integer - values for the relative attributes. - - >>> relativedelta(days=1.5, hours=2).normalized() - relativedelta(days=+1, hours=+14) - - :return: - Returns a :class:`dateutil.relativedelta.relativedelta` object. - """ - # Cascade remainders down (rounding each to roughly nearest microsecond) - days = int(self.days) - - hours_f = round(self.hours + 24 * (self.days - days), 11) - hours = int(hours_f) - - minutes_f = round(self.minutes + 60 * (hours_f - hours), 10) - minutes = int(minutes_f) - - seconds_f = round(self.seconds + 60 * (minutes_f - minutes), 8) - seconds = int(seconds_f) - - microseconds = round(self.microseconds + 1e6 * (seconds_f - seconds)) - - # Constructor carries overflow back up with call to _fix() - return self.__class__(years=self.years, months=self.months, - days=days, hours=hours, minutes=minutes, - seconds=seconds, microseconds=microseconds, - leapdays=self.leapdays, year=self.year, - month=self.month, day=self.day, - weekday=self.weekday, hour=self.hour, - minute=self.minute, second=self.second, - microsecond=self.microsecond) - - def __add__(self, other): - if isinstance(other, relativedelta): - return self.__class__(years=other.years + self.years, - months=other.months + self.months, - days=other.days + self.days, - hours=other.hours + self.hours, - minutes=other.minutes + self.minutes, - seconds=other.seconds + self.seconds, - microseconds=(other.microseconds + - self.microseconds), - leapdays=other.leapdays or self.leapdays, - year=(other.year if other.year is not None - else self.year), - month=(other.month if other.month is not None - else self.month), - day=(other.day if other.day is not None - else self.day), - weekday=(other.weekday if other.weekday is not None - else self.weekday), - hour=(other.hour if other.hour is not None - else self.hour), - minute=(other.minute if other.minute is not None - else self.minute), - second=(other.second if other.second is not None - else self.second), - microsecond=(other.microsecond if other.microsecond - is not None else - self.microsecond)) - if isinstance(other, datetime.timedelta): - return self.__class__(years=self.years, - months=self.months, - days=self.days + other.days, - hours=self.hours, - minutes=self.minutes, - seconds=self.seconds + other.seconds, - microseconds=self.microseconds + other.microseconds, - leapdays=self.leapdays, - year=self.year, - month=self.month, - day=self.day, - weekday=self.weekday, - hour=self.hour, - minute=self.minute, - second=self.second, - microsecond=self.microsecond) - if not isinstance(other, datetime.date): - return NotImplemented - elif self._has_time and not isinstance(other, datetime.datetime): - other = datetime.datetime.fromordinal(other.toordinal()) - year = (self.year or other.year)+self.years - month = self.month or other.month - if self.months: - assert 1 <= abs(self.months) <= 12 - month += self.months - if month > 12: - year += 1 - month -= 12 - elif month < 1: - year -= 1 - month += 12 - day = min(calendar.monthrange(year, month)[1], - self.day or other.day) - repl = {"year": year, "month": month, "day": day} - for attr in ["hour", "minute", "second", "microsecond"]: - value = getattr(self, attr) - if value is not None: - repl[attr] = value - days = self.days - if self.leapdays and month > 2 and calendar.isleap(year): - days += self.leapdays - ret = (other.replace(**repl) - + datetime.timedelta(days=days, - hours=self.hours, - minutes=self.minutes, - seconds=self.seconds, - microseconds=self.microseconds)) - if self.weekday: - weekday, nth = self.weekday.weekday, self.weekday.n or 1 - jumpdays = (abs(nth) - 1) * 7 - if nth > 0: - jumpdays += (7 - ret.weekday() + weekday) % 7 - else: - jumpdays += (ret.weekday() - weekday) % 7 - jumpdays *= -1 - ret += datetime.timedelta(days=jumpdays) - return ret - - def __radd__(self, other): - return self.__add__(other) - - def __rsub__(self, other): - return self.__neg__().__radd__(other) - - def __sub__(self, other): - if not isinstance(other, relativedelta): - return NotImplemented # In case the other object defines __rsub__ - return self.__class__(years=self.years - other.years, - months=self.months - other.months, - days=self.days - other.days, - hours=self.hours - other.hours, - minutes=self.minutes - other.minutes, - seconds=self.seconds - other.seconds, - microseconds=self.microseconds - other.microseconds, - leapdays=self.leapdays or other.leapdays, - year=(self.year if self.year is not None - else other.year), - month=(self.month if self.month is not None else - other.month), - day=(self.day if self.day is not None else - other.day), - weekday=(self.weekday if self.weekday is not None else - other.weekday), - hour=(self.hour if self.hour is not None else - other.hour), - minute=(self.minute if self.minute is not None else - other.minute), - second=(self.second if self.second is not None else - other.second), - microsecond=(self.microsecond if self.microsecond - is not None else - other.microsecond)) - - def __abs__(self): - return self.__class__(years=abs(self.years), - months=abs(self.months), - days=abs(self.days), - hours=abs(self.hours), - minutes=abs(self.minutes), - seconds=abs(self.seconds), - microseconds=abs(self.microseconds), - leapdays=self.leapdays, - year=self.year, - month=self.month, - day=self.day, - weekday=self.weekday, - hour=self.hour, - minute=self.minute, - second=self.second, - microsecond=self.microsecond) - - def __neg__(self): - return self.__class__(years=-self.years, - months=-self.months, - days=-self.days, - hours=-self.hours, - minutes=-self.minutes, - seconds=-self.seconds, - microseconds=-self.microseconds, - leapdays=self.leapdays, - year=self.year, - month=self.month, - day=self.day, - weekday=self.weekday, - hour=self.hour, - minute=self.minute, - second=self.second, - microsecond=self.microsecond) - - def __bool__(self): - return not (not self.years and - not self.months and - not self.days and - not self.hours and - not self.minutes and - not self.seconds and - not self.microseconds and - not self.leapdays and - self.year is None and - self.month is None and - self.day is None and - self.weekday is None and - self.hour is None and - self.minute is None and - self.second is None and - self.microsecond is None) - # Compatibility with Python 2.x - __nonzero__ = __bool__ - - def __mul__(self, other): - try: - f = float(other) - except TypeError: - return NotImplemented - - return self.__class__(years=int(self.years * f), - months=int(self.months * f), - days=int(self.days * f), - hours=int(self.hours * f), - minutes=int(self.minutes * f), - seconds=int(self.seconds * f), - microseconds=int(self.microseconds * f), - leapdays=self.leapdays, - year=self.year, - month=self.month, - day=self.day, - weekday=self.weekday, - hour=self.hour, - minute=self.minute, - second=self.second, - microsecond=self.microsecond) - - __rmul__ = __mul__ - - def __eq__(self, other): - if not isinstance(other, relativedelta): - return NotImplemented - if self.weekday or other.weekday: - if not self.weekday or not other.weekday: - return False - if self.weekday.weekday != other.weekday.weekday: - return False - n1, n2 = self.weekday.n, other.weekday.n - if n1 != n2 and not ((not n1 or n1 == 1) and (not n2 or n2 == 1)): - return False - return (self.years == other.years and - self.months == other.months and - self.days == other.days and - self.hours == other.hours and - self.minutes == other.minutes and - self.seconds == other.seconds and - self.microseconds == other.microseconds and - self.leapdays == other.leapdays and - self.year == other.year and - self.month == other.month and - self.day == other.day and - self.hour == other.hour and - self.minute == other.minute and - self.second == other.second and - self.microsecond == other.microsecond) - - def __hash__(self): - return hash(( - self.weekday, - self.years, - self.months, - self.days, - self.hours, - self.minutes, - self.seconds, - self.microseconds, - self.leapdays, - self.year, - self.month, - self.day, - self.hour, - self.minute, - self.second, - self.microsecond, - )) - - def __ne__(self, other): - return not self.__eq__(other) - - def __div__(self, other): - try: - reciprocal = 1 / float(other) - except TypeError: - return NotImplemented - - return self.__mul__(reciprocal) - - __truediv__ = __div__ - - def __repr__(self): - l = [] - for attr in ["years", "months", "days", "leapdays", - "hours", "minutes", "seconds", "microseconds"]: - value = getattr(self, attr) - if value: - l.append("{attr}={value:+g}".format(attr=attr, value=value)) - for attr in ["year", "month", "day", "weekday", - "hour", "minute", "second", "microsecond"]: - value = getattr(self, attr) - if value is not None: - l.append("{attr}={value}".format(attr=attr, value=repr(value))) - return "{classname}({attrs})".format(classname=self.__class__.__name__, - attrs=", ".join(l)) - - -def _sign(x): - return int(copysign(1, x)) - -# vim:ts=4:sw=4:et diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/rrule.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/rrule.py deleted file mode 100644 index 6bf0ea9..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/rrule.py +++ /dev/null @@ -1,1735 +0,0 @@ -# -*- coding: utf-8 -*- -""" -The rrule module offers a small, complete, and very fast, implementation of -the recurrence rules documented in the -`iCalendar RFC `_, -including support for caching of results. -""" -import itertools -import datetime -import calendar -import re -import sys - -try: - from math import gcd -except ImportError: - from fractions import gcd - -from six import advance_iterator, integer_types -from six.moves import _thread, range -import heapq - -from ._common import weekday as weekdaybase - -# For warning about deprecation of until and count -from warnings import warn - -__all__ = ["rrule", "rruleset", "rrulestr", - "YEARLY", "MONTHLY", "WEEKLY", "DAILY", - "HOURLY", "MINUTELY", "SECONDLY", - "MO", "TU", "WE", "TH", "FR", "SA", "SU"] - -# Every mask is 7 days longer to handle cross-year weekly periods. -M366MASK = tuple([1]*31+[2]*29+[3]*31+[4]*30+[5]*31+[6]*30 + - [7]*31+[8]*31+[9]*30+[10]*31+[11]*30+[12]*31+[1]*7) -M365MASK = list(M366MASK) -M29, M30, M31 = list(range(1, 30)), list(range(1, 31)), list(range(1, 32)) -MDAY366MASK = tuple(M31+M29+M31+M30+M31+M30+M31+M31+M30+M31+M30+M31+M31[:7]) -MDAY365MASK = list(MDAY366MASK) -M29, M30, M31 = list(range(-29, 0)), list(range(-30, 0)), list(range(-31, 0)) -NMDAY366MASK = tuple(M31+M29+M31+M30+M31+M30+M31+M31+M30+M31+M30+M31+M31[:7]) -NMDAY365MASK = list(NMDAY366MASK) -M366RANGE = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366) -M365RANGE = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365) -WDAYMASK = [0, 1, 2, 3, 4, 5, 6]*55 -del M29, M30, M31, M365MASK[59], MDAY365MASK[59], NMDAY365MASK[31] -MDAY365MASK = tuple(MDAY365MASK) -M365MASK = tuple(M365MASK) - -FREQNAMES = ['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY', 'HOURLY', 'MINUTELY', 'SECONDLY'] - -(YEARLY, - MONTHLY, - WEEKLY, - DAILY, - HOURLY, - MINUTELY, - SECONDLY) = list(range(7)) - -# Imported on demand. -easter = None -parser = None - - -class weekday(weekdaybase): - """ - This version of weekday does not allow n = 0. - """ - def __init__(self, wkday, n=None): - if n == 0: - raise ValueError("Can't create weekday with n==0") - - super(weekday, self).__init__(wkday, n) - - -MO, TU, WE, TH, FR, SA, SU = weekdays = tuple(weekday(x) for x in range(7)) - - -def _invalidates_cache(f): - """ - Decorator for rruleset methods which may invalidate the - cached length. - """ - def inner_func(self, *args, **kwargs): - rv = f(self, *args, **kwargs) - self._invalidate_cache() - return rv - - return inner_func - - -class rrulebase(object): - def __init__(self, cache=False): - if cache: - self._cache = [] - self._cache_lock = _thread.allocate_lock() - self._invalidate_cache() - else: - self._cache = None - self._cache_complete = False - self._len = None - - def __iter__(self): - if self._cache_complete: - return iter(self._cache) - elif self._cache is None: - return self._iter() - else: - return self._iter_cached() - - def _invalidate_cache(self): - if self._cache is not None: - self._cache = [] - self._cache_complete = False - self._cache_gen = self._iter() - - if self._cache_lock.locked(): - self._cache_lock.release() - - self._len = None - - def _iter_cached(self): - i = 0 - gen = self._cache_gen - cache = self._cache - acquire = self._cache_lock.acquire - release = self._cache_lock.release - while gen: - if i == len(cache): - acquire() - if self._cache_complete: - break - try: - for j in range(10): - cache.append(advance_iterator(gen)) - except StopIteration: - self._cache_gen = gen = None - self._cache_complete = True - break - release() - yield cache[i] - i += 1 - while i < self._len: - yield cache[i] - i += 1 - - def __getitem__(self, item): - if self._cache_complete: - return self._cache[item] - elif isinstance(item, slice): - if item.step and item.step < 0: - return list(iter(self))[item] - else: - return list(itertools.islice(self, - item.start or 0, - item.stop or sys.maxsize, - item.step or 1)) - elif item >= 0: - gen = iter(self) - try: - for i in range(item+1): - res = advance_iterator(gen) - except StopIteration: - raise IndexError - return res - else: - return list(iter(self))[item] - - def __contains__(self, item): - if self._cache_complete: - return item in self._cache - else: - for i in self: - if i == item: - return True - elif i > item: - return False - return False - - # __len__() introduces a large performance penalty. - def count(self): - """ Returns the number of recurrences in this set. It will have go - trough the whole recurrence, if this hasn't been done before. """ - if self._len is None: - for x in self: - pass - return self._len - - def before(self, dt, inc=False): - """ Returns the last recurrence before the given datetime instance. The - inc keyword defines what happens if dt is an occurrence. With - inc=True, if dt itself is an occurrence, it will be returned. """ - if self._cache_complete: - gen = self._cache - else: - gen = self - last = None - if inc: - for i in gen: - if i > dt: - break - last = i - else: - for i in gen: - if i >= dt: - break - last = i - return last - - def after(self, dt, inc=False): - """ Returns the first recurrence after the given datetime instance. The - inc keyword defines what happens if dt is an occurrence. With - inc=True, if dt itself is an occurrence, it will be returned. """ - if self._cache_complete: - gen = self._cache - else: - gen = self - if inc: - for i in gen: - if i >= dt: - return i - else: - for i in gen: - if i > dt: - return i - return None - - def xafter(self, dt, count=None, inc=False): - """ - Generator which yields up to `count` recurrences after the given - datetime instance, equivalent to `after`. - - :param dt: - The datetime at which to start generating recurrences. - - :param count: - The maximum number of recurrences to generate. If `None` (default), - dates are generated until the recurrence rule is exhausted. - - :param inc: - If `dt` is an instance of the rule and `inc` is `True`, it is - included in the output. - - :yields: Yields a sequence of `datetime` objects. - """ - - if self._cache_complete: - gen = self._cache - else: - gen = self - - # Select the comparison function - if inc: - comp = lambda dc, dtc: dc >= dtc - else: - comp = lambda dc, dtc: dc > dtc - - # Generate dates - n = 0 - for d in gen: - if comp(d, dt): - if count is not None: - n += 1 - if n > count: - break - - yield d - - def between(self, after, before, inc=False, count=1): - """ Returns all the occurrences of the rrule between after and before. - The inc keyword defines what happens if after and/or before are - themselves occurrences. With inc=True, they will be included in the - list, if they are found in the recurrence set. """ - if self._cache_complete: - gen = self._cache - else: - gen = self - started = False - l = [] - if inc: - for i in gen: - if i > before: - break - elif not started: - if i >= after: - started = True - l.append(i) - else: - l.append(i) - else: - for i in gen: - if i >= before: - break - elif not started: - if i > after: - started = True - l.append(i) - else: - l.append(i) - return l - - -class rrule(rrulebase): - """ - That's the base of the rrule operation. It accepts all the keywords - defined in the RFC as its constructor parameters (except byday, - which was renamed to byweekday) and more. The constructor prototype is:: - - rrule(freq) - - Where freq must be one of YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, - or SECONDLY. - - .. note:: - Per RFC section 3.3.10, recurrence instances falling on invalid dates - and times are ignored rather than coerced: - - Recurrence rules may generate recurrence instances with an invalid - date (e.g., February 30) or nonexistent local time (e.g., 1:30 AM - on a day where the local time is moved forward by an hour at 1:00 - AM). Such recurrence instances MUST be ignored and MUST NOT be - counted as part of the recurrence set. - - This can lead to possibly surprising behavior when, for example, the - start date occurs at the end of the month: - - >>> from dateutil.rrule import rrule, MONTHLY - >>> from datetime import datetime - >>> start_date = datetime(2014, 12, 31) - >>> list(rrule(freq=MONTHLY, count=4, dtstart=start_date)) - ... # doctest: +NORMALIZE_WHITESPACE - [datetime.datetime(2014, 12, 31, 0, 0), - datetime.datetime(2015, 1, 31, 0, 0), - datetime.datetime(2015, 3, 31, 0, 0), - datetime.datetime(2015, 5, 31, 0, 0)] - - Additionally, it supports the following keyword arguments: - - :param dtstart: - The recurrence start. Besides being the base for the recurrence, - missing parameters in the final recurrence instances will also be - extracted from this date. If not given, datetime.now() will be used - instead. - :param interval: - The interval between each freq iteration. For example, when using - YEARLY, an interval of 2 means once every two years, but with HOURLY, - it means once every two hours. The default interval is 1. - :param wkst: - The week start day. Must be one of the MO, TU, WE constants, or an - integer, specifying the first day of the week. This will affect - recurrences based on weekly periods. The default week start is got - from calendar.firstweekday(), and may be modified by - calendar.setfirstweekday(). - :param count: - If given, this determines how many occurrences will be generated. - - .. note:: - As of version 2.5.0, the use of the keyword ``until`` in conjunction - with ``count`` is deprecated, to make sure ``dateutil`` is fully - compliant with `RFC-5545 Sec. 3.3.10 `_. Therefore, ``until`` and ``count`` - **must not** occur in the same call to ``rrule``. - :param until: - If given, this must be a datetime instance specifying the upper-bound - limit of the recurrence. The last recurrence in the rule is the greatest - datetime that is less than or equal to the value specified in the - ``until`` parameter. - - .. note:: - As of version 2.5.0, the use of the keyword ``until`` in conjunction - with ``count`` is deprecated, to make sure ``dateutil`` is fully - compliant with `RFC-5545 Sec. 3.3.10 `_. Therefore, ``until`` and ``count`` - **must not** occur in the same call to ``rrule``. - :param bysetpos: - If given, it must be either an integer, or a sequence of integers, - positive or negative. Each given integer will specify an occurrence - number, corresponding to the nth occurrence of the rule inside the - frequency period. For example, a bysetpos of -1 if combined with a - MONTHLY frequency, and a byweekday of (MO, TU, WE, TH, FR), will - result in the last work day of every month. - :param bymonth: - If given, it must be either an integer, or a sequence of integers, - meaning the months to apply the recurrence to. - :param bymonthday: - If given, it must be either an integer, or a sequence of integers, - meaning the month days to apply the recurrence to. - :param byyearday: - If given, it must be either an integer, or a sequence of integers, - meaning the year days to apply the recurrence to. - :param byeaster: - If given, it must be either an integer, or a sequence of integers, - positive or negative. Each integer will define an offset from the - Easter Sunday. Passing the offset 0 to byeaster will yield the Easter - Sunday itself. This is an extension to the RFC specification. - :param byweekno: - If given, it must be either an integer, or a sequence of integers, - meaning the week numbers to apply the recurrence to. Week numbers - have the meaning described in ISO8601, that is, the first week of - the year is that containing at least four days of the new year. - :param byweekday: - If given, it must be either an integer (0 == MO), a sequence of - integers, one of the weekday constants (MO, TU, etc), or a sequence - of these constants. When given, these variables will define the - weekdays where the recurrence will be applied. It's also possible to - use an argument n for the weekday instances, which will mean the nth - occurrence of this weekday in the period. For example, with MONTHLY, - or with YEARLY and BYMONTH, using FR(+1) in byweekday will specify the - first friday of the month where the recurrence happens. Notice that in - the RFC documentation, this is specified as BYDAY, but was renamed to - avoid the ambiguity of that keyword. - :param byhour: - If given, it must be either an integer, or a sequence of integers, - meaning the hours to apply the recurrence to. - :param byminute: - If given, it must be either an integer, or a sequence of integers, - meaning the minutes to apply the recurrence to. - :param bysecond: - If given, it must be either an integer, or a sequence of integers, - meaning the seconds to apply the recurrence to. - :param cache: - If given, it must be a boolean value specifying to enable or disable - caching of results. If you will use the same rrule instance multiple - times, enabling caching will improve the performance considerably. - """ - def __init__(self, freq, dtstart=None, - interval=1, wkst=None, count=None, until=None, bysetpos=None, - bymonth=None, bymonthday=None, byyearday=None, byeaster=None, - byweekno=None, byweekday=None, - byhour=None, byminute=None, bysecond=None, - cache=False): - super(rrule, self).__init__(cache) - global easter - if not dtstart: - if until and until.tzinfo: - dtstart = datetime.datetime.now(tz=until.tzinfo).replace(microsecond=0) - else: - dtstart = datetime.datetime.now().replace(microsecond=0) - elif not isinstance(dtstart, datetime.datetime): - dtstart = datetime.datetime.fromordinal(dtstart.toordinal()) - else: - dtstart = dtstart.replace(microsecond=0) - self._dtstart = dtstart - self._tzinfo = dtstart.tzinfo - self._freq = freq - self._interval = interval - self._count = count - - # Cache the original byxxx rules, if they are provided, as the _byxxx - # attributes do not necessarily map to the inputs, and this can be - # a problem in generating the strings. Only store things if they've - # been supplied (the string retrieval will just use .get()) - self._original_rule = {} - - if until and not isinstance(until, datetime.datetime): - until = datetime.datetime.fromordinal(until.toordinal()) - self._until = until - - if self._dtstart and self._until: - if (self._dtstart.tzinfo is not None) != (self._until.tzinfo is not None): - # According to RFC5545 Section 3.3.10: - # https://tools.ietf.org/html/rfc5545#section-3.3.10 - # - # > If the "DTSTART" property is specified as a date with UTC - # > time or a date with local time and time zone reference, - # > then the UNTIL rule part MUST be specified as a date with - # > UTC time. - raise ValueError( - 'RRULE UNTIL values must be specified in UTC when DTSTART ' - 'is timezone-aware' - ) - - if count is not None and until: - warn("Using both 'count' and 'until' is inconsistent with RFC 5545" - " and has been deprecated in dateutil. Future versions will " - "raise an error.", DeprecationWarning) - - if wkst is None: - self._wkst = calendar.firstweekday() - elif isinstance(wkst, integer_types): - self._wkst = wkst - else: - self._wkst = wkst.weekday - - if bysetpos is None: - self._bysetpos = None - elif isinstance(bysetpos, integer_types): - if bysetpos == 0 or not (-366 <= bysetpos <= 366): - raise ValueError("bysetpos must be between 1 and 366, " - "or between -366 and -1") - self._bysetpos = (bysetpos,) - else: - self._bysetpos = tuple(bysetpos) - for pos in self._bysetpos: - if pos == 0 or not (-366 <= pos <= 366): - raise ValueError("bysetpos must be between 1 and 366, " - "or between -366 and -1") - - if self._bysetpos: - self._original_rule['bysetpos'] = self._bysetpos - - if (byweekno is None and byyearday is None and bymonthday is None and - byweekday is None and byeaster is None): - if freq == YEARLY: - if bymonth is None: - bymonth = dtstart.month - self._original_rule['bymonth'] = None - bymonthday = dtstart.day - self._original_rule['bymonthday'] = None - elif freq == MONTHLY: - bymonthday = dtstart.day - self._original_rule['bymonthday'] = None - elif freq == WEEKLY: - byweekday = dtstart.weekday() - self._original_rule['byweekday'] = None - - # bymonth - if bymonth is None: - self._bymonth = None - else: - if isinstance(bymonth, integer_types): - bymonth = (bymonth,) - - self._bymonth = tuple(sorted(set(bymonth))) - - if 'bymonth' not in self._original_rule: - self._original_rule['bymonth'] = self._bymonth - - # byyearday - if byyearday is None: - self._byyearday = None - else: - if isinstance(byyearday, integer_types): - byyearday = (byyearday,) - - self._byyearday = tuple(sorted(set(byyearday))) - self._original_rule['byyearday'] = self._byyearday - - # byeaster - if byeaster is not None: - if not easter: - from dateutil import easter - if isinstance(byeaster, integer_types): - self._byeaster = (byeaster,) - else: - self._byeaster = tuple(sorted(byeaster)) - - self._original_rule['byeaster'] = self._byeaster - else: - self._byeaster = None - - # bymonthday - if bymonthday is None: - self._bymonthday = () - self._bynmonthday = () - else: - if isinstance(bymonthday, integer_types): - bymonthday = (bymonthday,) - - bymonthday = set(bymonthday) # Ensure it's unique - - self._bymonthday = tuple(sorted(x for x in bymonthday if x > 0)) - self._bynmonthday = tuple(sorted(x for x in bymonthday if x < 0)) - - # Storing positive numbers first, then negative numbers - if 'bymonthday' not in self._original_rule: - self._original_rule['bymonthday'] = tuple( - itertools.chain(self._bymonthday, self._bynmonthday)) - - # byweekno - if byweekno is None: - self._byweekno = None - else: - if isinstance(byweekno, integer_types): - byweekno = (byweekno,) - - self._byweekno = tuple(sorted(set(byweekno))) - - self._original_rule['byweekno'] = self._byweekno - - # byweekday / bynweekday - if byweekday is None: - self._byweekday = None - self._bynweekday = None - else: - # If it's one of the valid non-sequence types, convert to a - # single-element sequence before the iterator that builds the - # byweekday set. - if isinstance(byweekday, integer_types) or hasattr(byweekday, "n"): - byweekday = (byweekday,) - - self._byweekday = set() - self._bynweekday = set() - for wday in byweekday: - if isinstance(wday, integer_types): - self._byweekday.add(wday) - elif not wday.n or freq > MONTHLY: - self._byweekday.add(wday.weekday) - else: - self._bynweekday.add((wday.weekday, wday.n)) - - if not self._byweekday: - self._byweekday = None - elif not self._bynweekday: - self._bynweekday = None - - if self._byweekday is not None: - self._byweekday = tuple(sorted(self._byweekday)) - orig_byweekday = [weekday(x) for x in self._byweekday] - else: - orig_byweekday = () - - if self._bynweekday is not None: - self._bynweekday = tuple(sorted(self._bynweekday)) - orig_bynweekday = [weekday(*x) for x in self._bynweekday] - else: - orig_bynweekday = () - - if 'byweekday' not in self._original_rule: - self._original_rule['byweekday'] = tuple(itertools.chain( - orig_byweekday, orig_bynweekday)) - - # byhour - if byhour is None: - if freq < HOURLY: - self._byhour = {dtstart.hour} - else: - self._byhour = None - else: - if isinstance(byhour, integer_types): - byhour = (byhour,) - - if freq == HOURLY: - self._byhour = self.__construct_byset(start=dtstart.hour, - byxxx=byhour, - base=24) - else: - self._byhour = set(byhour) - - self._byhour = tuple(sorted(self._byhour)) - self._original_rule['byhour'] = self._byhour - - # byminute - if byminute is None: - if freq < MINUTELY: - self._byminute = {dtstart.minute} - else: - self._byminute = None - else: - if isinstance(byminute, integer_types): - byminute = (byminute,) - - if freq == MINUTELY: - self._byminute = self.__construct_byset(start=dtstart.minute, - byxxx=byminute, - base=60) - else: - self._byminute = set(byminute) - - self._byminute = tuple(sorted(self._byminute)) - self._original_rule['byminute'] = self._byminute - - # bysecond - if bysecond is None: - if freq < SECONDLY: - self._bysecond = ((dtstart.second,)) - else: - self._bysecond = None - else: - if isinstance(bysecond, integer_types): - bysecond = (bysecond,) - - self._bysecond = set(bysecond) - - if freq == SECONDLY: - self._bysecond = self.__construct_byset(start=dtstart.second, - byxxx=bysecond, - base=60) - else: - self._bysecond = set(bysecond) - - self._bysecond = tuple(sorted(self._bysecond)) - self._original_rule['bysecond'] = self._bysecond - - if self._freq >= HOURLY: - self._timeset = None - else: - self._timeset = [] - for hour in self._byhour: - for minute in self._byminute: - for second in self._bysecond: - self._timeset.append( - datetime.time(hour, minute, second, - tzinfo=self._tzinfo)) - self._timeset.sort() - self._timeset = tuple(self._timeset) - - def __str__(self): - """ - Output a string that would generate this RRULE if passed to rrulestr. - This is mostly compatible with RFC5545, except for the - dateutil-specific extension BYEASTER. - """ - - output = [] - h, m, s = [None] * 3 - if self._dtstart: - output.append(self._dtstart.strftime('DTSTART:%Y%m%dT%H%M%S')) - h, m, s = self._dtstart.timetuple()[3:6] - - parts = ['FREQ=' + FREQNAMES[self._freq]] - if self._interval != 1: - parts.append('INTERVAL=' + str(self._interval)) - - if self._wkst: - parts.append('WKST=' + repr(weekday(self._wkst))[0:2]) - - if self._count is not None: - parts.append('COUNT=' + str(self._count)) - - if self._until: - parts.append(self._until.strftime('UNTIL=%Y%m%dT%H%M%S')) - - if self._original_rule.get('byweekday') is not None: - # The str() method on weekday objects doesn't generate - # RFC5545-compliant strings, so we should modify that. - original_rule = dict(self._original_rule) - wday_strings = [] - for wday in original_rule['byweekday']: - if wday.n: - wday_strings.append('{n:+d}{wday}'.format( - n=wday.n, - wday=repr(wday)[0:2])) - else: - wday_strings.append(repr(wday)) - - original_rule['byweekday'] = wday_strings - else: - original_rule = self._original_rule - - partfmt = '{name}={vals}' - for name, key in [('BYSETPOS', 'bysetpos'), - ('BYMONTH', 'bymonth'), - ('BYMONTHDAY', 'bymonthday'), - ('BYYEARDAY', 'byyearday'), - ('BYWEEKNO', 'byweekno'), - ('BYDAY', 'byweekday'), - ('BYHOUR', 'byhour'), - ('BYMINUTE', 'byminute'), - ('BYSECOND', 'bysecond'), - ('BYEASTER', 'byeaster')]: - value = original_rule.get(key) - if value: - parts.append(partfmt.format(name=name, vals=(','.join(str(v) - for v in value)))) - - output.append('RRULE:' + ';'.join(parts)) - return '\n'.join(output) - - def replace(self, **kwargs): - """Return new rrule with same attributes except for those attributes given new - values by whichever keyword arguments are specified.""" - new_kwargs = {"interval": self._interval, - "count": self._count, - "dtstart": self._dtstart, - "freq": self._freq, - "until": self._until, - "wkst": self._wkst, - "cache": False if self._cache is None else True } - new_kwargs.update(self._original_rule) - new_kwargs.update(kwargs) - return rrule(**new_kwargs) - - def _iter(self): - year, month, day, hour, minute, second, weekday, yearday, _ = \ - self._dtstart.timetuple() - - # Some local variables to speed things up a bit - freq = self._freq - interval = self._interval - wkst = self._wkst - until = self._until - bymonth = self._bymonth - byweekno = self._byweekno - byyearday = self._byyearday - byweekday = self._byweekday - byeaster = self._byeaster - bymonthday = self._bymonthday - bynmonthday = self._bynmonthday - bysetpos = self._bysetpos - byhour = self._byhour - byminute = self._byminute - bysecond = self._bysecond - - ii = _iterinfo(self) - ii.rebuild(year, month) - - getdayset = {YEARLY: ii.ydayset, - MONTHLY: ii.mdayset, - WEEKLY: ii.wdayset, - DAILY: ii.ddayset, - HOURLY: ii.ddayset, - MINUTELY: ii.ddayset, - SECONDLY: ii.ddayset}[freq] - - if freq < HOURLY: - timeset = self._timeset - else: - gettimeset = {HOURLY: ii.htimeset, - MINUTELY: ii.mtimeset, - SECONDLY: ii.stimeset}[freq] - if ((freq >= HOURLY and - self._byhour and hour not in self._byhour) or - (freq >= MINUTELY and - self._byminute and minute not in self._byminute) or - (freq >= SECONDLY and - self._bysecond and second not in self._bysecond)): - timeset = () - else: - timeset = gettimeset(hour, minute, second) - - total = 0 - count = self._count - while True: - # Get dayset with the right frequency - dayset, start, end = getdayset(year, month, day) - - # Do the "hard" work ;-) - filtered = False - for i in dayset[start:end]: - if ((bymonth and ii.mmask[i] not in bymonth) or - (byweekno and not ii.wnomask[i]) or - (byweekday and ii.wdaymask[i] not in byweekday) or - (ii.nwdaymask and not ii.nwdaymask[i]) or - (byeaster and not ii.eastermask[i]) or - ((bymonthday or bynmonthday) and - ii.mdaymask[i] not in bymonthday and - ii.nmdaymask[i] not in bynmonthday) or - (byyearday and - ((i < ii.yearlen and i+1 not in byyearday and - -ii.yearlen+i not in byyearday) or - (i >= ii.yearlen and i+1-ii.yearlen not in byyearday and - -ii.nextyearlen+i-ii.yearlen not in byyearday)))): - dayset[i] = None - filtered = True - - # Output results - if bysetpos and timeset: - poslist = [] - for pos in bysetpos: - if pos < 0: - daypos, timepos = divmod(pos, len(timeset)) - else: - daypos, timepos = divmod(pos-1, len(timeset)) - try: - i = [x for x in dayset[start:end] - if x is not None][daypos] - time = timeset[timepos] - except IndexError: - pass - else: - date = datetime.date.fromordinal(ii.yearordinal+i) - res = datetime.datetime.combine(date, time) - if res not in poslist: - poslist.append(res) - poslist.sort() - for res in poslist: - if until and res > until: - self._len = total - return - elif res >= self._dtstart: - if count is not None: - count -= 1 - if count < 0: - self._len = total - return - total += 1 - yield res - else: - for i in dayset[start:end]: - if i is not None: - date = datetime.date.fromordinal(ii.yearordinal + i) - for time in timeset: - res = datetime.datetime.combine(date, time) - if until and res > until: - self._len = total - return - elif res >= self._dtstart: - if count is not None: - count -= 1 - if count < 0: - self._len = total - return - - total += 1 - yield res - - # Handle frequency and interval - fixday = False - if freq == YEARLY: - year += interval - if year > datetime.MAXYEAR: - self._len = total - return - ii.rebuild(year, month) - elif freq == MONTHLY: - month += interval - if month > 12: - div, mod = divmod(month, 12) - month = mod - year += div - if month == 0: - month = 12 - year -= 1 - if year > datetime.MAXYEAR: - self._len = total - return - ii.rebuild(year, month) - elif freq == WEEKLY: - if wkst > weekday: - day += -(weekday+1+(6-wkst))+self._interval*7 - else: - day += -(weekday-wkst)+self._interval*7 - weekday = wkst - fixday = True - elif freq == DAILY: - day += interval - fixday = True - elif freq == HOURLY: - if filtered: - # Jump to one iteration before next day - hour += ((23-hour)//interval)*interval - - if byhour: - ndays, hour = self.__mod_distance(value=hour, - byxxx=self._byhour, - base=24) - else: - ndays, hour = divmod(hour+interval, 24) - - if ndays: - day += ndays - fixday = True - - timeset = gettimeset(hour, minute, second) - elif freq == MINUTELY: - if filtered: - # Jump to one iteration before next day - minute += ((1439-(hour*60+minute))//interval)*interval - - valid = False - rep_rate = (24*60) - for j in range(rep_rate // gcd(interval, rep_rate)): - if byminute: - nhours, minute = \ - self.__mod_distance(value=minute, - byxxx=self._byminute, - base=60) - else: - nhours, minute = divmod(minute+interval, 60) - - div, hour = divmod(hour+nhours, 24) - if div: - day += div - fixday = True - filtered = False - - if not byhour or hour in byhour: - valid = True - break - - if not valid: - raise ValueError('Invalid combination of interval and ' + - 'byhour resulting in empty rule.') - - timeset = gettimeset(hour, minute, second) - elif freq == SECONDLY: - if filtered: - # Jump to one iteration before next day - second += (((86399 - (hour * 3600 + minute * 60 + second)) - // interval) * interval) - - rep_rate = (24 * 3600) - valid = False - for j in range(0, rep_rate // gcd(interval, rep_rate)): - if bysecond: - nminutes, second = \ - self.__mod_distance(value=second, - byxxx=self._bysecond, - base=60) - else: - nminutes, second = divmod(second+interval, 60) - - div, minute = divmod(minute+nminutes, 60) - if div: - hour += div - div, hour = divmod(hour, 24) - if div: - day += div - fixday = True - - if ((not byhour or hour in byhour) and - (not byminute or minute in byminute) and - (not bysecond or second in bysecond)): - valid = True - break - - if not valid: - raise ValueError('Invalid combination of interval, ' + - 'byhour and byminute resulting in empty' + - ' rule.') - - timeset = gettimeset(hour, minute, second) - - if fixday and day > 28: - daysinmonth = calendar.monthrange(year, month)[1] - if day > daysinmonth: - while day > daysinmonth: - day -= daysinmonth - month += 1 - if month == 13: - month = 1 - year += 1 - if year > datetime.MAXYEAR: - self._len = total - return - daysinmonth = calendar.monthrange(year, month)[1] - ii.rebuild(year, month) - - def __construct_byset(self, start, byxxx, base): - """ - If a `BYXXX` sequence is passed to the constructor at the same level as - `FREQ` (e.g. `FREQ=HOURLY,BYHOUR={2,4,7},INTERVAL=3`), there are some - specifications which cannot be reached given some starting conditions. - - This occurs whenever the interval is not coprime with the base of a - given unit and the difference between the starting position and the - ending position is not coprime with the greatest common denominator - between the interval and the base. For example, with a FREQ of hourly - starting at 17:00 and an interval of 4, the only valid values for - BYHOUR would be {21, 1, 5, 9, 13, 17}, because 4 and 24 are not - coprime. - - :param start: - Specifies the starting position. - :param byxxx: - An iterable containing the list of allowed values. - :param base: - The largest allowable value for the specified frequency (e.g. - 24 hours, 60 minutes). - - This does not preserve the type of the iterable, returning a set, since - the values should be unique and the order is irrelevant, this will - speed up later lookups. - - In the event of an empty set, raises a :exception:`ValueError`, as this - results in an empty rrule. - """ - - cset = set() - - # Support a single byxxx value. - if isinstance(byxxx, integer_types): - byxxx = (byxxx, ) - - for num in byxxx: - i_gcd = gcd(self._interval, base) - # Use divmod rather than % because we need to wrap negative nums. - if i_gcd == 1 or divmod(num - start, i_gcd)[1] == 0: - cset.add(num) - - if len(cset) == 0: - raise ValueError("Invalid rrule byxxx generates an empty set.") - - return cset - - def __mod_distance(self, value, byxxx, base): - """ - Calculates the next value in a sequence where the `FREQ` parameter is - specified along with a `BYXXX` parameter at the same "level" - (e.g. `HOURLY` specified with `BYHOUR`). - - :param value: - The old value of the component. - :param byxxx: - The `BYXXX` set, which should have been generated by - `rrule._construct_byset`, or something else which checks that a - valid rule is present. - :param base: - The largest allowable value for the specified frequency (e.g. - 24 hours, 60 minutes). - - If a valid value is not found after `base` iterations (the maximum - number before the sequence would start to repeat), this raises a - :exception:`ValueError`, as no valid values were found. - - This returns a tuple of `divmod(n*interval, base)`, where `n` is the - smallest number of `interval` repetitions until the next specified - value in `byxxx` is found. - """ - accumulator = 0 - for ii in range(1, base + 1): - # Using divmod() over % to account for negative intervals - div, value = divmod(value + self._interval, base) - accumulator += div - if value in byxxx: - return (accumulator, value) - - -class _iterinfo(object): - __slots__ = ["rrule", "lastyear", "lastmonth", - "yearlen", "nextyearlen", "yearordinal", "yearweekday", - "mmask", "mrange", "mdaymask", "nmdaymask", - "wdaymask", "wnomask", "nwdaymask", "eastermask"] - - def __init__(self, rrule): - for attr in self.__slots__: - setattr(self, attr, None) - self.rrule = rrule - - def rebuild(self, year, month): - # Every mask is 7 days longer to handle cross-year weekly periods. - rr = self.rrule - if year != self.lastyear: - self.yearlen = 365 + calendar.isleap(year) - self.nextyearlen = 365 + calendar.isleap(year + 1) - firstyday = datetime.date(year, 1, 1) - self.yearordinal = firstyday.toordinal() - self.yearweekday = firstyday.weekday() - - wday = datetime.date(year, 1, 1).weekday() - if self.yearlen == 365: - self.mmask = M365MASK - self.mdaymask = MDAY365MASK - self.nmdaymask = NMDAY365MASK - self.wdaymask = WDAYMASK[wday:] - self.mrange = M365RANGE - else: - self.mmask = M366MASK - self.mdaymask = MDAY366MASK - self.nmdaymask = NMDAY366MASK - self.wdaymask = WDAYMASK[wday:] - self.mrange = M366RANGE - - if not rr._byweekno: - self.wnomask = None - else: - self.wnomask = [0]*(self.yearlen+7) - # no1wkst = firstwkst = self.wdaymask.index(rr._wkst) - no1wkst = firstwkst = (7-self.yearweekday+rr._wkst) % 7 - if no1wkst >= 4: - no1wkst = 0 - # Number of days in the year, plus the days we got - # from last year. - wyearlen = self.yearlen+(self.yearweekday-rr._wkst) % 7 - else: - # Number of days in the year, minus the days we - # left in last year. - wyearlen = self.yearlen-no1wkst - div, mod = divmod(wyearlen, 7) - numweeks = div+mod//4 - for n in rr._byweekno: - if n < 0: - n += numweeks+1 - if not (0 < n <= numweeks): - continue - if n > 1: - i = no1wkst+(n-1)*7 - if no1wkst != firstwkst: - i -= 7-firstwkst - else: - i = no1wkst - for j in range(7): - self.wnomask[i] = 1 - i += 1 - if self.wdaymask[i] == rr._wkst: - break - if 1 in rr._byweekno: - # Check week number 1 of next year as well - # TODO: Check -numweeks for next year. - i = no1wkst+numweeks*7 - if no1wkst != firstwkst: - i -= 7-firstwkst - if i < self.yearlen: - # If week starts in next year, we - # don't care about it. - for j in range(7): - self.wnomask[i] = 1 - i += 1 - if self.wdaymask[i] == rr._wkst: - break - if no1wkst: - # Check last week number of last year as - # well. If no1wkst is 0, either the year - # started on week start, or week number 1 - # got days from last year, so there are no - # days from last year's last week number in - # this year. - if -1 not in rr._byweekno: - lyearweekday = datetime.date(year-1, 1, 1).weekday() - lno1wkst = (7-lyearweekday+rr._wkst) % 7 - lyearlen = 365+calendar.isleap(year-1) - if lno1wkst >= 4: - lno1wkst = 0 - lnumweeks = 52+(lyearlen + - (lyearweekday-rr._wkst) % 7) % 7//4 - else: - lnumweeks = 52+(self.yearlen-no1wkst) % 7//4 - else: - lnumweeks = -1 - if lnumweeks in rr._byweekno: - for i in range(no1wkst): - self.wnomask[i] = 1 - - if (rr._bynweekday and (month != self.lastmonth or - year != self.lastyear)): - ranges = [] - if rr._freq == YEARLY: - if rr._bymonth: - for month in rr._bymonth: - ranges.append(self.mrange[month-1:month+1]) - else: - ranges = [(0, self.yearlen)] - elif rr._freq == MONTHLY: - ranges = [self.mrange[month-1:month+1]] - if ranges: - # Weekly frequency won't get here, so we may not - # care about cross-year weekly periods. - self.nwdaymask = [0]*self.yearlen - for first, last in ranges: - last -= 1 - for wday, n in rr._bynweekday: - if n < 0: - i = last+(n+1)*7 - i -= (self.wdaymask[i]-wday) % 7 - else: - i = first+(n-1)*7 - i += (7-self.wdaymask[i]+wday) % 7 - if first <= i <= last: - self.nwdaymask[i] = 1 - - if rr._byeaster: - self.eastermask = [0]*(self.yearlen+7) - eyday = easter.easter(year).toordinal()-self.yearordinal - for offset in rr._byeaster: - self.eastermask[eyday+offset] = 1 - - self.lastyear = year - self.lastmonth = month - - def ydayset(self, year, month, day): - return list(range(self.yearlen)), 0, self.yearlen - - def mdayset(self, year, month, day): - dset = [None]*self.yearlen - start, end = self.mrange[month-1:month+1] - for i in range(start, end): - dset[i] = i - return dset, start, end - - def wdayset(self, year, month, day): - # We need to handle cross-year weeks here. - dset = [None]*(self.yearlen+7) - i = datetime.date(year, month, day).toordinal()-self.yearordinal - start = i - for j in range(7): - dset[i] = i - i += 1 - # if (not (0 <= i < self.yearlen) or - # self.wdaymask[i] == self.rrule._wkst): - # This will cross the year boundary, if necessary. - if self.wdaymask[i] == self.rrule._wkst: - break - return dset, start, i - - def ddayset(self, year, month, day): - dset = [None] * self.yearlen - i = datetime.date(year, month, day).toordinal() - self.yearordinal - dset[i] = i - return dset, i, i + 1 - - def htimeset(self, hour, minute, second): - tset = [] - rr = self.rrule - for minute in rr._byminute: - for second in rr._bysecond: - tset.append(datetime.time(hour, minute, second, - tzinfo=rr._tzinfo)) - tset.sort() - return tset - - def mtimeset(self, hour, minute, second): - tset = [] - rr = self.rrule - for second in rr._bysecond: - tset.append(datetime.time(hour, minute, second, tzinfo=rr._tzinfo)) - tset.sort() - return tset - - def stimeset(self, hour, minute, second): - return (datetime.time(hour, minute, second, - tzinfo=self.rrule._tzinfo),) - - -class rruleset(rrulebase): - """ The rruleset type allows more complex recurrence setups, mixing - multiple rules, dates, exclusion rules, and exclusion dates. The type - constructor takes the following keyword arguments: - - :param cache: If True, caching of results will be enabled, improving - performance of multiple queries considerably. """ - - class _genitem(object): - def __init__(self, genlist, gen): - try: - self.dt = advance_iterator(gen) - genlist.append(self) - except StopIteration: - pass - self.genlist = genlist - self.gen = gen - - def __next__(self): - try: - self.dt = advance_iterator(self.gen) - except StopIteration: - if self.genlist[0] is self: - heapq.heappop(self.genlist) - else: - self.genlist.remove(self) - heapq.heapify(self.genlist) - - next = __next__ - - def __lt__(self, other): - return self.dt < other.dt - - def __gt__(self, other): - return self.dt > other.dt - - def __eq__(self, other): - return self.dt == other.dt - - def __ne__(self, other): - return self.dt != other.dt - - def __init__(self, cache=False): - super(rruleset, self).__init__(cache) - self._rrule = [] - self._rdate = [] - self._exrule = [] - self._exdate = [] - - @_invalidates_cache - def rrule(self, rrule): - """ Include the given :py:class:`rrule` instance in the recurrence set - generation. """ - self._rrule.append(rrule) - - @_invalidates_cache - def rdate(self, rdate): - """ Include the given :py:class:`datetime` instance in the recurrence - set generation. """ - self._rdate.append(rdate) - - @_invalidates_cache - def exrule(self, exrule): - """ Include the given rrule instance in the recurrence set exclusion - list. Dates which are part of the given recurrence rules will not - be generated, even if some inclusive rrule or rdate matches them. - """ - self._exrule.append(exrule) - - @_invalidates_cache - def exdate(self, exdate): - """ Include the given datetime instance in the recurrence set - exclusion list. Dates included that way will not be generated, - even if some inclusive rrule or rdate matches them. """ - self._exdate.append(exdate) - - def _iter(self): - rlist = [] - self._rdate.sort() - self._genitem(rlist, iter(self._rdate)) - for gen in [iter(x) for x in self._rrule]: - self._genitem(rlist, gen) - exlist = [] - self._exdate.sort() - self._genitem(exlist, iter(self._exdate)) - for gen in [iter(x) for x in self._exrule]: - self._genitem(exlist, gen) - lastdt = None - total = 0 - heapq.heapify(rlist) - heapq.heapify(exlist) - while rlist: - ritem = rlist[0] - if not lastdt or lastdt != ritem.dt: - while exlist and exlist[0] < ritem: - exitem = exlist[0] - advance_iterator(exitem) - if exlist and exlist[0] is exitem: - heapq.heapreplace(exlist, exitem) - if not exlist or ritem != exlist[0]: - total += 1 - yield ritem.dt - lastdt = ritem.dt - advance_iterator(ritem) - if rlist and rlist[0] is ritem: - heapq.heapreplace(rlist, ritem) - self._len = total - - - - -class _rrulestr(object): - """ Parses a string representation of a recurrence rule or set of - recurrence rules. - - :param s: - Required, a string defining one or more recurrence rules. - - :param dtstart: - If given, used as the default recurrence start if not specified in the - rule string. - - :param cache: - If set ``True`` caching of results will be enabled, improving - performance of multiple queries considerably. - - :param unfold: - If set ``True`` indicates that a rule string is split over more - than one line and should be joined before processing. - - :param forceset: - If set ``True`` forces a :class:`dateutil.rrule.rruleset` to - be returned. - - :param compatible: - If set ``True`` forces ``unfold`` and ``forceset`` to be ``True``. - - :param ignoretz: - If set ``True``, time zones in parsed strings are ignored and a naive - :class:`datetime.datetime` object is returned. - - :param tzids: - If given, a callable or mapping used to retrieve a - :class:`datetime.tzinfo` from a string representation. - Defaults to :func:`dateutil.tz.gettz`. - - :param tzinfos: - Additional time zone names / aliases which may be present in a string - representation. See :func:`dateutil.parser.parse` for more - information. - - :return: - Returns a :class:`dateutil.rrule.rruleset` or - :class:`dateutil.rrule.rrule` - """ - - _freq_map = {"YEARLY": YEARLY, - "MONTHLY": MONTHLY, - "WEEKLY": WEEKLY, - "DAILY": DAILY, - "HOURLY": HOURLY, - "MINUTELY": MINUTELY, - "SECONDLY": SECONDLY} - - _weekday_map = {"MO": 0, "TU": 1, "WE": 2, "TH": 3, - "FR": 4, "SA": 5, "SU": 6} - - def _handle_int(self, rrkwargs, name, value, **kwargs): - rrkwargs[name.lower()] = int(value) - - def _handle_int_list(self, rrkwargs, name, value, **kwargs): - rrkwargs[name.lower()] = [int(x) for x in value.split(',')] - - _handle_INTERVAL = _handle_int - _handle_COUNT = _handle_int - _handle_BYSETPOS = _handle_int_list - _handle_BYMONTH = _handle_int_list - _handle_BYMONTHDAY = _handle_int_list - _handle_BYYEARDAY = _handle_int_list - _handle_BYEASTER = _handle_int_list - _handle_BYWEEKNO = _handle_int_list - _handle_BYHOUR = _handle_int_list - _handle_BYMINUTE = _handle_int_list - _handle_BYSECOND = _handle_int_list - - def _handle_FREQ(self, rrkwargs, name, value, **kwargs): - rrkwargs["freq"] = self._freq_map[value] - - def _handle_UNTIL(self, rrkwargs, name, value, **kwargs): - global parser - if not parser: - from dateutil import parser - try: - rrkwargs["until"] = parser.parse(value, - ignoretz=kwargs.get("ignoretz"), - tzinfos=kwargs.get("tzinfos")) - except ValueError: - raise ValueError("invalid until date") - - def _handle_WKST(self, rrkwargs, name, value, **kwargs): - rrkwargs["wkst"] = self._weekday_map[value] - - def _handle_BYWEEKDAY(self, rrkwargs, name, value, **kwargs): - """ - Two ways to specify this: +1MO or MO(+1) - """ - l = [] - for wday in value.split(','): - if '(' in wday: - # If it's of the form TH(+1), etc. - splt = wday.split('(') - w = splt[0] - n = int(splt[1][:-1]) - elif len(wday): - # If it's of the form +1MO - for i in range(len(wday)): - if wday[i] not in '+-0123456789': - break - n = wday[:i] or None - w = wday[i:] - if n: - n = int(n) - else: - raise ValueError("Invalid (empty) BYDAY specification.") - - l.append(weekdays[self._weekday_map[w]](n)) - rrkwargs["byweekday"] = l - - _handle_BYDAY = _handle_BYWEEKDAY - - def _parse_rfc_rrule(self, line, - dtstart=None, - cache=False, - ignoretz=False, - tzinfos=None): - if line.find(':') != -1: - name, value = line.split(':') - if name != "RRULE": - raise ValueError("unknown parameter name") - else: - value = line - rrkwargs = {} - for pair in value.split(';'): - name, value = pair.split('=') - name = name.upper() - value = value.upper() - try: - getattr(self, "_handle_"+name)(rrkwargs, name, value, - ignoretz=ignoretz, - tzinfos=tzinfos) - except AttributeError: - raise ValueError("unknown parameter '%s'" % name) - except (KeyError, ValueError): - raise ValueError("invalid '%s': %s" % (name, value)) - return rrule(dtstart=dtstart, cache=cache, **rrkwargs) - - def _parse_date_value(self, date_value, parms, rule_tzids, - ignoretz, tzids, tzinfos): - global parser - if not parser: - from dateutil import parser - - datevals = [] - value_found = False - TZID = None - - for parm in parms: - if parm.startswith("TZID="): - try: - tzkey = rule_tzids[parm.split('TZID=')[-1]] - except KeyError: - continue - if tzids is None: - from . import tz - tzlookup = tz.gettz - elif callable(tzids): - tzlookup = tzids - else: - tzlookup = getattr(tzids, 'get', None) - if tzlookup is None: - msg = ('tzids must be a callable, mapping, or None, ' - 'not %s' % tzids) - raise ValueError(msg) - - TZID = tzlookup(tzkey) - continue - - # RFC 5445 3.8.2.4: The VALUE parameter is optional, but may be found - # only once. - if parm not in {"VALUE=DATE-TIME", "VALUE=DATE"}: - raise ValueError("unsupported parm: " + parm) - else: - if value_found: - msg = ("Duplicate value parameter found in: " + parm) - raise ValueError(msg) - value_found = True - - for datestr in date_value.split(','): - date = parser.parse(datestr, ignoretz=ignoretz, tzinfos=tzinfos) - if TZID is not None: - if date.tzinfo is None: - date = date.replace(tzinfo=TZID) - else: - raise ValueError('DTSTART/EXDATE specifies multiple timezone') - datevals.append(date) - - return datevals - - def _parse_rfc(self, s, - dtstart=None, - cache=False, - unfold=False, - forceset=False, - compatible=False, - ignoretz=False, - tzids=None, - tzinfos=None): - global parser - if compatible: - forceset = True - unfold = True - - TZID_NAMES = dict(map( - lambda x: (x.upper(), x), - re.findall('TZID=(?P[^:]+):', s) - )) - s = s.upper() - if not s.strip(): - raise ValueError("empty string") - if unfold: - lines = s.splitlines() - i = 0 - while i < len(lines): - line = lines[i].rstrip() - if not line: - del lines[i] - elif i > 0 and line[0] == " ": - lines[i-1] += line[1:] - del lines[i] - else: - i += 1 - else: - lines = s.split() - if (not forceset and len(lines) == 1 and (s.find(':') == -1 or - s.startswith('RRULE:'))): - return self._parse_rfc_rrule(lines[0], cache=cache, - dtstart=dtstart, ignoretz=ignoretz, - tzinfos=tzinfos) - else: - rrulevals = [] - rdatevals = [] - exrulevals = [] - exdatevals = [] - for line in lines: - if not line: - continue - if line.find(':') == -1: - name = "RRULE" - value = line - else: - name, value = line.split(':', 1) - parms = name.split(';') - if not parms: - raise ValueError("empty property name") - name = parms[0] - parms = parms[1:] - if name == "RRULE": - for parm in parms: - raise ValueError("unsupported RRULE parm: "+parm) - rrulevals.append(value) - elif name == "RDATE": - for parm in parms: - if parm != "VALUE=DATE-TIME": - raise ValueError("unsupported RDATE parm: "+parm) - rdatevals.append(value) - elif name == "EXRULE": - for parm in parms: - raise ValueError("unsupported EXRULE parm: "+parm) - exrulevals.append(value) - elif name == "EXDATE": - exdatevals.extend( - self._parse_date_value(value, parms, - TZID_NAMES, ignoretz, - tzids, tzinfos) - ) - elif name == "DTSTART": - dtvals = self._parse_date_value(value, parms, TZID_NAMES, - ignoretz, tzids, tzinfos) - if len(dtvals) != 1: - raise ValueError("Multiple DTSTART values specified:" + - value) - dtstart = dtvals[0] - else: - raise ValueError("unsupported property: "+name) - if (forceset or len(rrulevals) > 1 or rdatevals - or exrulevals or exdatevals): - if not parser and (rdatevals or exdatevals): - from dateutil import parser - rset = rruleset(cache=cache) - for value in rrulevals: - rset.rrule(self._parse_rfc_rrule(value, dtstart=dtstart, - ignoretz=ignoretz, - tzinfos=tzinfos)) - for value in rdatevals: - for datestr in value.split(','): - rset.rdate(parser.parse(datestr, - ignoretz=ignoretz, - tzinfos=tzinfos)) - for value in exrulevals: - rset.exrule(self._parse_rfc_rrule(value, dtstart=dtstart, - ignoretz=ignoretz, - tzinfos=tzinfos)) - for value in exdatevals: - rset.exdate(value) - if compatible and dtstart: - rset.rdate(dtstart) - return rset - else: - return self._parse_rfc_rrule(rrulevals[0], - dtstart=dtstart, - cache=cache, - ignoretz=ignoretz, - tzinfos=tzinfos) - - def __call__(self, s, **kwargs): - return self._parse_rfc(s, **kwargs) - - -rrulestr = _rrulestr() - -# vim:ts=4:sw=4:et diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__init__.py deleted file mode 100644 index af1352c..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -from .tz import * -from .tz import __doc__ - -__all__ = ["tzutc", "tzoffset", "tzlocal", "tzfile", "tzrange", - "tzstr", "tzical", "tzwin", "tzwinlocal", "gettz", - "enfold", "datetime_ambiguous", "datetime_exists", - "resolve_imaginary", "UTC", "DeprecatedTzFormatWarning"] - - -class DeprecatedTzFormatWarning(Warning): - """Warning raised when time zones are parsed from deprecated formats.""" diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 08edc69c846f589e4a82ca2b83b618a052a7e942..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmY*Wy^ho{5Vn*33AtTvZ-IgarCp@GG!$1LbOHnox`sWFTwqMb2^Nl>vmK603opYv z@CLj=S}I-v2?;w{9Wa*1^W&Lse$JQ66nXmo_SKtj7@;3Q`IlB+IrZ1R@C*=OiFV#C6wIb1T1h-)Q1;LufpJOtC+b_}P&QFhr zHn_+4J)2Vsx}cOyUDvvzPh6+V(sD=Uu9Lc8lFVFJ3dw`PFjevJ)jAXGBKW;}DHKVE zXAGHE+_{d-xGJ>-vIge36E&x-ekZC{x0W1U+xRD8oh3(xTP;6wDr!~<#mrS7pYNXZ zcc1dc@WN++UH43znz`4^D50vt_wgTv#!mgUVR{@942VR4Neq#1JT^0L?jG->GsA@C zkX^p#DhtJBomSjt%kO{pvvNSU$7h>KpHQlp?}+v(rL~4u26;j0Ma$&q zF|o({icHw_z*2ZFR<^i!Kuev6skBbW+;usnLJ3FdadS14 ze&F-i$g>2WZKi$X_Yn}n4w;l5eZFsP`281lltOf$JRD1X6w=sxL#{=X;t1`}D2@F0 GWcCL+gt-m? diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/_common.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/_common.cpython-38.pyc deleted file mode 100644 index 8fb8d20faa83df3465409de0647d04d6bc148bfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10723 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 DnFxmb diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/_factories.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/_factories.cpython-38.pyc deleted file mode 100644 index 3138898f93f6ae3d08aaffceb77abe6c34c26267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2834 zcmb_eOLH4V5T4mxtyZrf$O9*VAP7Ze0oy>5B1NSj6qLD8c7a1e>A&lS`Rxpv8w5vo>%vDe_w0AYc#3^p1*#4@IwW9 zf1@)0c%a;ariLIm;WQ!8=IUgOR-2^-JADha8n=%g>WNOiOcT5U^mAqD?3 zi8ZKYrgx=?c#MnZANN>MH=rX(n{v{2o{|pblsiv?wrl$?_n_}RB_3&)z-YgMrK3SC zOi7J~Ldp^xVgejbG-F4uapP1OFOoaT_`N-RAHn?@i_=IcSV8{zWL@`%>%(NYIvNb4 zxF`7P-mVbo>W+#Z-C~_=okv=Xbds*?@jB~7vCd>7)Y@=gR=^xKg^4B9r{jzB{;d^` zEZiC+P~2R#K*>oLZr%&zmEz_T_s~WHXSRv-VNvMGGQ4DfqPS)pr72?}l{FkahoXt% zWfZS~Xh2iAozN<6o_6o}03TyEi28ytQ)R55@llHXI%AJUQ97Nmx3#C5#&G~+f%d01 ztzqkewT>>LuQoIRt$Wt#7+slv98m5-Qx`xKpt67>ZI`th2 z6rL)P({p#k>zSZfihe7+1#!mbXO6BF^8i|T9%dyjlowH4Mq$G>6E85Y(B%xh80uZ6H!l!jyeAjIuD|BB(RDk*&vep=IXNb8DEve*A84HQrGYw!u7DJL5yn3cKJ-{kw<J#gd-R;-D0NIK4AcMzb4J>aoB@p6}wL+7!VdzS5A+tE@E zvlAaz9>Nc1Nw@s_9g0;Um{efaJA`W34RZG`(N*jnKvKH3o+p1nty@RB{0dd_A-PSy zA>WekN$x?K+|3Or=N=R~9X3ogQ3WI=Cfzi2rlXW80j%IkzJX)zj?ktGaN(j8jZ!^@ z>UEfsEjvHVhQ>|BK)#7;8Pr6Jeps>v$aq*NjGtM=8Mi0)m$80Qm~g+s1YqpXIe~Ky zG7!+}zn&M+3vQFHoSltn!P-13Et3lKF{SH_RJLbLq9vr=aWx9c5=UZa3lApw9yE0g z#3^o-Iq>QU1$Ozst^lea{IO~IKT=Cx1-oHIz78*mKA4pS8>a|_6q~ug*aCZ6FPNNB zN4|x25c%^5S^mA4K6hZ>B7N+i^GQHXxU&&sT#ILcJUNWckp$|`5=m|W#L2|5B(a|Z zCnWKXNm2sx6eIyM0ZGcRr({VI07(X@bt`9+M7|9UgjM+wyyOiOAqrceZ)5K!ig!`G zhvF8B_dyhpr>b2aW-9raO;In`am7-FKSBLxFsUwqAb@p1{W9WD1@IW|A>EK4;K65M z`$L%c7}^ZmI1<)PfFCaSsb>jqL1k)jmZrj%=xGgZSHStTe)f}4wvx&fw1Y{qe?OKd h5)VAfwh8V|zZE{kj~a#l{&l!h-Ko3HTGMY{`w!%xbshi! diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/tz.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/tz.cpython-38.pyc deleted file mode 100644 index a1053e803c56312c19888ce67912e2941d8f20d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44848 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 wj~3H=ZcU6#yh-}1Fnk7kQVYE{?&1G)@xga7~l diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/win.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/__pycache__/win.cpython-38.pyc deleted file mode 100644 index f981b4681154e6143fa39a9b8f4cac30355e7701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11228 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 diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/_common.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/_common.py deleted file mode 100644 index e6ac118..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/_common.py +++ /dev/null @@ -1,419 +0,0 @@ -from six import PY2 - -from functools import wraps - -from datetime import datetime, timedelta, tzinfo - - -ZERO = timedelta(0) - -__all__ = ['tzname_in_python2', 'enfold'] - - -def tzname_in_python2(namefunc): - """Change unicode output into bytestrings in Python 2 - - tzname() API changed in Python 3. It used to return bytes, but was changed - to unicode strings - """ - if PY2: - @wraps(namefunc) - def adjust_encoding(*args, **kwargs): - name = namefunc(*args, **kwargs) - if name is not None: - name = name.encode() - - return name - - return adjust_encoding - else: - return namefunc - - -# The following is adapted from Alexander Belopolsky's tz library -# https://github.com/abalkin/tz -if hasattr(datetime, 'fold'): - # This is the pre-python 3.6 fold situation - def enfold(dt, fold=1): - """ - Provides a unified interface for assigning the ``fold`` attribute to - datetimes both before and after the implementation of PEP-495. - - :param fold: - The value for the ``fold`` attribute in the returned datetime. This - should be either 0 or 1. - - :return: - Returns an object for which ``getattr(dt, 'fold', 0)`` returns - ``fold`` for all versions of Python. In versions prior to - Python 3.6, this is a ``_DatetimeWithFold`` object, which is a - subclass of :py:class:`datetime.datetime` with the ``fold`` - attribute added, if ``fold`` is 1. - - .. versionadded:: 2.6.0 - """ - return dt.replace(fold=fold) - -else: - class _DatetimeWithFold(datetime): - """ - This is a class designed to provide a PEP 495-compliant interface for - Python versions before 3.6. It is used only for dates in a fold, so - the ``fold`` attribute is fixed at ``1``. - - .. versionadded:: 2.6.0 - """ - __slots__ = () - - def replace(self, *args, **kwargs): - """ - Return a datetime with the same attributes, except for those - attributes given new values by whichever keyword arguments are - specified. Note that tzinfo=None can be specified to create a naive - datetime from an aware datetime with no conversion of date and time - data. - - This is reimplemented in ``_DatetimeWithFold`` because pypy3 will - return a ``datetime.datetime`` even if ``fold`` is unchanged. - """ - argnames = ( - 'year', 'month', 'day', 'hour', 'minute', 'second', - 'microsecond', 'tzinfo' - ) - - for arg, argname in zip(args, argnames): - if argname in kwargs: - raise TypeError('Duplicate argument: {}'.format(argname)) - - kwargs[argname] = arg - - for argname in argnames: - if argname not in kwargs: - kwargs[argname] = getattr(self, argname) - - dt_class = self.__class__ if kwargs.get('fold', 1) else datetime - - return dt_class(**kwargs) - - @property - def fold(self): - return 1 - - def enfold(dt, fold=1): - """ - Provides a unified interface for assigning the ``fold`` attribute to - datetimes both before and after the implementation of PEP-495. - - :param fold: - The value for the ``fold`` attribute in the returned datetime. This - should be either 0 or 1. - - :return: - Returns an object for which ``getattr(dt, 'fold', 0)`` returns - ``fold`` for all versions of Python. In versions prior to - Python 3.6, this is a ``_DatetimeWithFold`` object, which is a - subclass of :py:class:`datetime.datetime` with the ``fold`` - attribute added, if ``fold`` is 1. - - .. versionadded:: 2.6.0 - """ - if getattr(dt, 'fold', 0) == fold: - return dt - - args = dt.timetuple()[:6] - args += (dt.microsecond, dt.tzinfo) - - if fold: - return _DatetimeWithFold(*args) - else: - return datetime(*args) - - -def _validate_fromutc_inputs(f): - """ - The CPython version of ``fromutc`` checks that the input is a ``datetime`` - object and that ``self`` is attached as its ``tzinfo``. - """ - @wraps(f) - def fromutc(self, dt): - if not isinstance(dt, datetime): - raise TypeError("fromutc() requires a datetime argument") - if dt.tzinfo is not self: - raise ValueError("dt.tzinfo is not self") - - return f(self, dt) - - return fromutc - - -class _tzinfo(tzinfo): - """ - Base class for all ``dateutil`` ``tzinfo`` objects. - """ - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - - dt = dt.replace(tzinfo=self) - - wall_0 = enfold(dt, fold=0) - wall_1 = enfold(dt, fold=1) - - same_offset = wall_0.utcoffset() == wall_1.utcoffset() - same_dt = wall_0.replace(tzinfo=None) == wall_1.replace(tzinfo=None) - - return same_dt and not same_offset - - def _fold_status(self, dt_utc, dt_wall): - """ - Determine the fold status of a "wall" datetime, given a representation - of the same datetime as a (naive) UTC datetime. This is calculated based - on the assumption that ``dt.utcoffset() - dt.dst()`` is constant for all - datetimes, and that this offset is the actual number of hours separating - ``dt_utc`` and ``dt_wall``. - - :param dt_utc: - Representation of the datetime as UTC - - :param dt_wall: - Representation of the datetime as "wall time". This parameter must - either have a `fold` attribute or have a fold-naive - :class:`datetime.tzinfo` attached, otherwise the calculation may - fail. - """ - if self.is_ambiguous(dt_wall): - delta_wall = dt_wall - dt_utc - _fold = int(delta_wall == (dt_utc.utcoffset() - dt_utc.dst())) - else: - _fold = 0 - - return _fold - - def _fold(self, dt): - return getattr(dt, 'fold', 0) - - def _fromutc(self, dt): - """ - Given a timezone-aware datetime in a given timezone, calculates a - timezone-aware datetime in a new timezone. - - Since this is the one time that we *know* we have an unambiguous - datetime object, we take this opportunity to determine whether the - datetime is ambiguous and in a "fold" state (e.g. if it's the first - occurrence, chronologically, of the ambiguous datetime). - - :param dt: - A timezone-aware :class:`datetime.datetime` object. - """ - - # Re-implement the algorithm from Python's datetime.py - dtoff = dt.utcoffset() - if dtoff is None: - raise ValueError("fromutc() requires a non-None utcoffset() " - "result") - - # The original datetime.py code assumes that `dst()` defaults to - # zero during ambiguous times. PEP 495 inverts this presumption, so - # for pre-PEP 495 versions of python, we need to tweak the algorithm. - dtdst = dt.dst() - if dtdst is None: - raise ValueError("fromutc() requires a non-None dst() result") - delta = dtoff - dtdst - - dt += delta - # Set fold=1 so we can default to being in the fold for - # ambiguous dates. - dtdst = enfold(dt, fold=1).dst() - if dtdst is None: - raise ValueError("fromutc(): dt.dst gave inconsistent " - "results; cannot convert") - return dt + dtdst - - @_validate_fromutc_inputs - def fromutc(self, dt): - """ - Given a timezone-aware datetime in a given timezone, calculates a - timezone-aware datetime in a new timezone. - - Since this is the one time that we *know* we have an unambiguous - datetime object, we take this opportunity to determine whether the - datetime is ambiguous and in a "fold" state (e.g. if it's the first - occurrence, chronologically, of the ambiguous datetime). - - :param dt: - A timezone-aware :class:`datetime.datetime` object. - """ - dt_wall = self._fromutc(dt) - - # Calculate the fold status given the two datetimes. - _fold = self._fold_status(dt, dt_wall) - - # Set the default fold value for ambiguous dates - return enfold(dt_wall, fold=_fold) - - -class tzrangebase(_tzinfo): - """ - This is an abstract base class for time zones represented by an annual - transition into and out of DST. Child classes should implement the following - methods: - - * ``__init__(self, *args, **kwargs)`` - * ``transitions(self, year)`` - this is expected to return a tuple of - datetimes representing the DST on and off transitions in standard - time. - - A fully initialized ``tzrangebase`` subclass should also provide the - following attributes: - * ``hasdst``: Boolean whether or not the zone uses DST. - * ``_dst_offset`` / ``_std_offset``: :class:`datetime.timedelta` objects - representing the respective UTC offsets. - * ``_dst_abbr`` / ``_std_abbr``: Strings representing the timezone short - abbreviations in DST and STD, respectively. - * ``_hasdst``: Whether or not the zone has DST. - - .. versionadded:: 2.6.0 - """ - def __init__(self): - raise NotImplementedError('tzrangebase is an abstract base class') - - def utcoffset(self, dt): - isdst = self._isdst(dt) - - if isdst is None: - return None - elif isdst: - return self._dst_offset - else: - return self._std_offset - - def dst(self, dt): - isdst = self._isdst(dt) - - if isdst is None: - return None - elif isdst: - return self._dst_base_offset - else: - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - if self._isdst(dt): - return self._dst_abbr - else: - return self._std_abbr - - def fromutc(self, dt): - """ Given a datetime in UTC, return local time """ - if not isinstance(dt, datetime): - raise TypeError("fromutc() requires a datetime argument") - - if dt.tzinfo is not self: - raise ValueError("dt.tzinfo is not self") - - # Get transitions - if there are none, fixed offset - transitions = self.transitions(dt.year) - if transitions is None: - return dt + self.utcoffset(dt) - - # Get the transition times in UTC - dston, dstoff = transitions - - dston -= self._std_offset - dstoff -= self._std_offset - - utc_transitions = (dston, dstoff) - dt_utc = dt.replace(tzinfo=None) - - isdst = self._naive_isdst(dt_utc, utc_transitions) - - if isdst: - dt_wall = dt + self._dst_offset - else: - dt_wall = dt + self._std_offset - - _fold = int(not isdst and self.is_ambiguous(dt_wall)) - - return enfold(dt_wall, fold=_fold) - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - if not self.hasdst: - return False - - start, end = self.transitions(dt.year) - - dt = dt.replace(tzinfo=None) - return (end <= dt < end + self._dst_base_offset) - - def _isdst(self, dt): - if not self.hasdst: - return False - elif dt is None: - return None - - transitions = self.transitions(dt.year) - - if transitions is None: - return False - - dt = dt.replace(tzinfo=None) - - isdst = self._naive_isdst(dt, transitions) - - # Handle ambiguous dates - if not isdst and self.is_ambiguous(dt): - return not self._fold(dt) - else: - return isdst - - def _naive_isdst(self, dt, transitions): - dston, dstoff = transitions - - dt = dt.replace(tzinfo=None) - - if dston < dstoff: - isdst = dston <= dt < dstoff - else: - isdst = not dstoff <= dt < dston - - return isdst - - @property - def _dst_base_offset(self): - return self._dst_offset - self._std_offset - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s(...)" % self.__class__.__name__ - - __reduce__ = object.__reduce__ diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/_factories.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/_factories.py deleted file mode 100644 index f8a6589..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/_factories.py +++ /dev/null @@ -1,80 +0,0 @@ -from datetime import timedelta -import weakref -from collections import OrderedDict - -from six.moves import _thread - - -class _TzSingleton(type): - def __init__(cls, *args, **kwargs): - cls.__instance = None - super(_TzSingleton, cls).__init__(*args, **kwargs) - - def __call__(cls): - if cls.__instance is None: - cls.__instance = super(_TzSingleton, cls).__call__() - return cls.__instance - - -class _TzFactory(type): - def instance(cls, *args, **kwargs): - """Alternate constructor that returns a fresh instance""" - return type.__call__(cls, *args, **kwargs) - - -class _TzOffsetFactory(_TzFactory): - def __init__(cls, *args, **kwargs): - cls.__instances = weakref.WeakValueDictionary() - cls.__strong_cache = OrderedDict() - cls.__strong_cache_size = 8 - - cls._cache_lock = _thread.allocate_lock() - - def __call__(cls, name, offset): - if isinstance(offset, timedelta): - key = (name, offset.total_seconds()) - else: - key = (name, offset) - - instance = cls.__instances.get(key, None) - if instance is None: - instance = cls.__instances.setdefault(key, - cls.instance(name, offset)) - - # This lock may not be necessary in Python 3. See GH issue #901 - with cls._cache_lock: - cls.__strong_cache[key] = cls.__strong_cache.pop(key, instance) - - # Remove an item if the strong cache is overpopulated - if len(cls.__strong_cache) > cls.__strong_cache_size: - cls.__strong_cache.popitem(last=False) - - return instance - - -class _TzStrFactory(_TzFactory): - def __init__(cls, *args, **kwargs): - cls.__instances = weakref.WeakValueDictionary() - cls.__strong_cache = OrderedDict() - cls.__strong_cache_size = 8 - - cls.__cache_lock = _thread.allocate_lock() - - def __call__(cls, s, posix_offset=False): - key = (s, posix_offset) - instance = cls.__instances.get(key, None) - - if instance is None: - instance = cls.__instances.setdefault(key, - cls.instance(s, posix_offset)) - - # This lock may not be necessary in Python 3. See GH issue #901 - with cls.__cache_lock: - cls.__strong_cache[key] = cls.__strong_cache.pop(key, instance) - - # Remove an item if the strong cache is overpopulated - if len(cls.__strong_cache) > cls.__strong_cache_size: - cls.__strong_cache.popitem(last=False) - - return instance - diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/tz.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/tz.py deleted file mode 100644 index af81e88..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/tz.py +++ /dev/null @@ -1,1849 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers timezone implementations subclassing the abstract -:py:class:`datetime.tzinfo` type. There are classes to handle tzfile format -files (usually are in :file:`/etc/localtime`, :file:`/usr/share/zoneinfo`, -etc), TZ environment string (in all known formats), given ranges (with help -from relative deltas), local machine timezone, fixed offset timezone, and UTC -timezone. -""" -import datetime -import struct -import time -import sys -import os -import bisect -import weakref -from collections import OrderedDict - -import six -from six import string_types -from six.moves import _thread -from ._common import tzname_in_python2, _tzinfo -from ._common import tzrangebase, enfold -from ._common import _validate_fromutc_inputs - -from ._factories import _TzSingleton, _TzOffsetFactory -from ._factories import _TzStrFactory -try: - from .win import tzwin, tzwinlocal -except ImportError: - tzwin = tzwinlocal = None - -# For warning about rounding tzinfo -from warnings import warn - -ZERO = datetime.timedelta(0) -EPOCH = datetime.datetime.utcfromtimestamp(0) -EPOCHORDINAL = EPOCH.toordinal() - - -@six.add_metaclass(_TzSingleton) -class tzutc(datetime.tzinfo): - """ - This is a tzinfo object that represents the UTC time zone. - - **Examples:** - - .. doctest:: - - >>> from datetime import * - >>> from dateutil.tz import * - - >>> datetime.now() - datetime.datetime(2003, 9, 27, 9, 40, 1, 521290) - - >>> datetime.now(tzutc()) - datetime.datetime(2003, 9, 27, 12, 40, 12, 156379, tzinfo=tzutc()) - - >>> datetime.now(tzutc()).tzname() - 'UTC' - - .. versionchanged:: 2.7.0 - ``tzutc()`` is now a singleton, so the result of ``tzutc()`` will - always return the same object. - - .. doctest:: - - >>> from dateutil.tz import tzutc, UTC - >>> tzutc() is tzutc() - True - >>> tzutc() is UTC - True - """ - def utcoffset(self, dt): - return ZERO - - def dst(self, dt): - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - return "UTC" - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - return False - - @_validate_fromutc_inputs - def fromutc(self, dt): - """ - Fast track version of fromutc() returns the original ``dt`` object for - any valid :py:class:`datetime.datetime` object. - """ - return dt - - def __eq__(self, other): - if not isinstance(other, (tzutc, tzoffset)): - return NotImplemented - - return (isinstance(other, tzutc) or - (isinstance(other, tzoffset) and other._offset == ZERO)) - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s()" % self.__class__.__name__ - - __reduce__ = object.__reduce__ - - -#: Convenience constant providing a :class:`tzutc()` instance -#: -#: .. versionadded:: 2.7.0 -UTC = tzutc() - - -@six.add_metaclass(_TzOffsetFactory) -class tzoffset(datetime.tzinfo): - """ - A simple class for representing a fixed offset from UTC. - - :param name: - The timezone name, to be returned when ``tzname()`` is called. - :param offset: - The time zone offset in seconds, or (since version 2.6.0, represented - as a :py:class:`datetime.timedelta` object). - """ - def __init__(self, name, offset): - self._name = name - - try: - # Allow a timedelta - offset = offset.total_seconds() - except (TypeError, AttributeError): - pass - - self._offset = datetime.timedelta(seconds=_get_supported_offset(offset)) - - def utcoffset(self, dt): - return self._offset - - def dst(self, dt): - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - return self._name - - @_validate_fromutc_inputs - def fromutc(self, dt): - return dt + self._offset - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - return False - - def __eq__(self, other): - if not isinstance(other, tzoffset): - return NotImplemented - - return self._offset == other._offset - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s(%s, %s)" % (self.__class__.__name__, - repr(self._name), - int(self._offset.total_seconds())) - - __reduce__ = object.__reduce__ - - -class tzlocal(_tzinfo): - """ - A :class:`tzinfo` subclass built around the ``time`` timezone functions. - """ - def __init__(self): - super(tzlocal, self).__init__() - - self._std_offset = datetime.timedelta(seconds=-time.timezone) - if time.daylight: - self._dst_offset = datetime.timedelta(seconds=-time.altzone) - else: - self._dst_offset = self._std_offset - - self._dst_saved = self._dst_offset - self._std_offset - self._hasdst = bool(self._dst_saved) - self._tznames = tuple(time.tzname) - - def utcoffset(self, dt): - if dt is None and self._hasdst: - return None - - if self._isdst(dt): - return self._dst_offset - else: - return self._std_offset - - def dst(self, dt): - if dt is None and self._hasdst: - return None - - if self._isdst(dt): - return self._dst_offset - self._std_offset - else: - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - return self._tznames[self._isdst(dt)] - - def is_ambiguous(self, dt): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - naive_dst = self._naive_is_dst(dt) - return (not naive_dst and - (naive_dst != self._naive_is_dst(dt - self._dst_saved))) - - def _naive_is_dst(self, dt): - timestamp = _datetime_to_timestamp(dt) - return time.localtime(timestamp + time.timezone).tm_isdst - - def _isdst(self, dt, fold_naive=True): - # We can't use mktime here. It is unstable when deciding if - # the hour near to a change is DST or not. - # - # timestamp = time.mktime((dt.year, dt.month, dt.day, dt.hour, - # dt.minute, dt.second, dt.weekday(), 0, -1)) - # return time.localtime(timestamp).tm_isdst - # - # The code above yields the following result: - # - # >>> import tz, datetime - # >>> t = tz.tzlocal() - # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() - # 'BRDT' - # >>> datetime.datetime(2003,2,16,0,tzinfo=t).tzname() - # 'BRST' - # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() - # 'BRST' - # >>> datetime.datetime(2003,2,15,22,tzinfo=t).tzname() - # 'BRDT' - # >>> datetime.datetime(2003,2,15,23,tzinfo=t).tzname() - # 'BRDT' - # - # Here is a more stable implementation: - # - if not self._hasdst: - return False - - # Check for ambiguous times: - dstval = self._naive_is_dst(dt) - fold = getattr(dt, 'fold', None) - - if self.is_ambiguous(dt): - if fold is not None: - return not self._fold(dt) - else: - return True - - return dstval - - def __eq__(self, other): - if isinstance(other, tzlocal): - return (self._std_offset == other._std_offset and - self._dst_offset == other._dst_offset) - elif isinstance(other, tzutc): - return (not self._hasdst and - self._tznames[0] in {'UTC', 'GMT'} and - self._std_offset == ZERO) - elif isinstance(other, tzoffset): - return (not self._hasdst and - self._tznames[0] == other._name and - self._std_offset == other._offset) - else: - return NotImplemented - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s()" % self.__class__.__name__ - - __reduce__ = object.__reduce__ - - -class _ttinfo(object): - __slots__ = ["offset", "delta", "isdst", "abbr", - "isstd", "isgmt", "dstoffset"] - - def __init__(self): - for attr in self.__slots__: - setattr(self, attr, None) - - def __repr__(self): - l = [] - for attr in self.__slots__: - value = getattr(self, attr) - if value is not None: - l.append("%s=%s" % (attr, repr(value))) - return "%s(%s)" % (self.__class__.__name__, ", ".join(l)) - - def __eq__(self, other): - if not isinstance(other, _ttinfo): - return NotImplemented - - return (self.offset == other.offset and - self.delta == other.delta and - self.isdst == other.isdst and - self.abbr == other.abbr and - self.isstd == other.isstd and - self.isgmt == other.isgmt and - self.dstoffset == other.dstoffset) - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __getstate__(self): - state = {} - for name in self.__slots__: - state[name] = getattr(self, name, None) - return state - - def __setstate__(self, state): - for name in self.__slots__: - if name in state: - setattr(self, name, state[name]) - - -class _tzfile(object): - """ - Lightweight class for holding the relevant transition and time zone - information read from binary tzfiles. - """ - attrs = ['trans_list', 'trans_list_utc', 'trans_idx', 'ttinfo_list', - 'ttinfo_std', 'ttinfo_dst', 'ttinfo_before', 'ttinfo_first'] - - def __init__(self, **kwargs): - for attr in self.attrs: - setattr(self, attr, kwargs.get(attr, None)) - - -class tzfile(_tzinfo): - """ - This is a ``tzinfo`` subclass that allows one to use the ``tzfile(5)`` - format timezone files to extract current and historical zone information. - - :param fileobj: - This can be an opened file stream or a file name that the time zone - information can be read from. - - :param filename: - This is an optional parameter specifying the source of the time zone - information in the event that ``fileobj`` is a file object. If omitted - and ``fileobj`` is a file stream, this parameter will be set either to - ``fileobj``'s ``name`` attribute or to ``repr(fileobj)``. - - See `Sources for Time Zone and Daylight Saving Time Data - `_ for more information. - Time zone files can be compiled from the `IANA Time Zone database files - `_ with the `zic time zone compiler - `_ - - .. note:: - - Only construct a ``tzfile`` directly if you have a specific timezone - file on disk that you want to read into a Python ``tzinfo`` object. - If you want to get a ``tzfile`` representing a specific IANA zone, - (e.g. ``'America/New_York'``), you should call - :func:`dateutil.tz.gettz` with the zone identifier. - - - **Examples:** - - Using the US Eastern time zone as an example, we can see that a ``tzfile`` - provides time zone information for the standard Daylight Saving offsets: - - .. testsetup:: tzfile - - from dateutil.tz import gettz - from datetime import datetime - - .. doctest:: tzfile - - >>> NYC = gettz('America/New_York') - >>> NYC - tzfile('/usr/share/zoneinfo/America/New_York') - - >>> print(datetime(2016, 1, 3, tzinfo=NYC)) # EST - 2016-01-03 00:00:00-05:00 - - >>> print(datetime(2016, 7, 7, tzinfo=NYC)) # EDT - 2016-07-07 00:00:00-04:00 - - - The ``tzfile`` structure contains a fully history of the time zone, - so historical dates will also have the right offsets. For example, before - the adoption of the UTC standards, New York used local solar mean time: - - .. doctest:: tzfile - - >>> print(datetime(1901, 4, 12, tzinfo=NYC)) # LMT - 1901-04-12 00:00:00-04:56 - - And during World War II, New York was on "Eastern War Time", which was a - state of permanent daylight saving time: - - .. doctest:: tzfile - - >>> print(datetime(1944, 2, 7, tzinfo=NYC)) # EWT - 1944-02-07 00:00:00-04:00 - - """ - - def __init__(self, fileobj, filename=None): - super(tzfile, self).__init__() - - file_opened_here = False - if isinstance(fileobj, string_types): - self._filename = fileobj - fileobj = open(fileobj, 'rb') - file_opened_here = True - elif filename is not None: - self._filename = filename - elif hasattr(fileobj, "name"): - self._filename = fileobj.name - else: - self._filename = repr(fileobj) - - if fileobj is not None: - if not file_opened_here: - fileobj = _nullcontext(fileobj) - - with fileobj as file_stream: - tzobj = self._read_tzfile(file_stream) - - self._set_tzdata(tzobj) - - def _set_tzdata(self, tzobj): - """ Set the time zone data of this object from a _tzfile object """ - # Copy the relevant attributes over as private attributes - for attr in _tzfile.attrs: - setattr(self, '_' + attr, getattr(tzobj, attr)) - - def _read_tzfile(self, fileobj): - out = _tzfile() - - # From tzfile(5): - # - # The time zone information files used by tzset(3) - # begin with the magic characters "TZif" to identify - # them as time zone information files, followed by - # sixteen bytes reserved for future use, followed by - # six four-byte values of type long, written in a - # ``standard'' byte order (the high-order byte - # of the value is written first). - if fileobj.read(4).decode() != "TZif": - raise ValueError("magic not found") - - fileobj.read(16) - - ( - # The number of UTC/local indicators stored in the file. - ttisgmtcnt, - - # The number of standard/wall indicators stored in the file. - ttisstdcnt, - - # The number of leap seconds for which data is - # stored in the file. - leapcnt, - - # The number of "transition times" for which data - # is stored in the file. - timecnt, - - # The number of "local time types" for which data - # is stored in the file (must not be zero). - typecnt, - - # The number of characters of "time zone - # abbreviation strings" stored in the file. - charcnt, - - ) = struct.unpack(">6l", fileobj.read(24)) - - # The above header is followed by tzh_timecnt four-byte - # values of type long, sorted in ascending order. - # These values are written in ``standard'' byte order. - # Each is used as a transition time (as returned by - # time(2)) at which the rules for computing local time - # change. - - if timecnt: - out.trans_list_utc = list(struct.unpack(">%dl" % timecnt, - fileobj.read(timecnt*4))) - else: - out.trans_list_utc = [] - - # Next come tzh_timecnt one-byte values of type unsigned - # char; each one tells which of the different types of - # ``local time'' types described in the file is associated - # with the same-indexed transition time. These values - # serve as indices into an array of ttinfo structures that - # appears next in the file. - - if timecnt: - out.trans_idx = struct.unpack(">%dB" % timecnt, - fileobj.read(timecnt)) - else: - out.trans_idx = [] - - # Each ttinfo structure is written as a four-byte value - # for tt_gmtoff of type long, in a standard byte - # order, followed by a one-byte value for tt_isdst - # and a one-byte value for tt_abbrind. In each - # structure, tt_gmtoff gives the number of - # seconds to be added to UTC, tt_isdst tells whether - # tm_isdst should be set by localtime(3), and - # tt_abbrind serves as an index into the array of - # time zone abbreviation characters that follow the - # ttinfo structure(s) in the file. - - ttinfo = [] - - for i in range(typecnt): - ttinfo.append(struct.unpack(">lbb", fileobj.read(6))) - - abbr = fileobj.read(charcnt).decode() - - # Then there are tzh_leapcnt pairs of four-byte - # values, written in standard byte order; the - # first value of each pair gives the time (as - # returned by time(2)) at which a leap second - # occurs; the second gives the total number of - # leap seconds to be applied after the given time. - # The pairs of values are sorted in ascending order - # by time. - - # Not used, for now (but seek for correct file position) - if leapcnt: - fileobj.seek(leapcnt * 8, os.SEEK_CUR) - - # Then there are tzh_ttisstdcnt standard/wall - # indicators, each stored as a one-byte value; - # they tell whether the transition times associated - # with local time types were specified as standard - # time or wall clock time, and are used when - # a time zone file is used in handling POSIX-style - # time zone environment variables. - - if ttisstdcnt: - isstd = struct.unpack(">%db" % ttisstdcnt, - fileobj.read(ttisstdcnt)) - - # Finally, there are tzh_ttisgmtcnt UTC/local - # indicators, each stored as a one-byte value; - # they tell whether the transition times associated - # with local time types were specified as UTC or - # local time, and are used when a time zone file - # is used in handling POSIX-style time zone envi- - # ronment variables. - - if ttisgmtcnt: - isgmt = struct.unpack(">%db" % ttisgmtcnt, - fileobj.read(ttisgmtcnt)) - - # Build ttinfo list - out.ttinfo_list = [] - for i in range(typecnt): - gmtoff, isdst, abbrind = ttinfo[i] - gmtoff = _get_supported_offset(gmtoff) - tti = _ttinfo() - tti.offset = gmtoff - tti.dstoffset = datetime.timedelta(0) - tti.delta = datetime.timedelta(seconds=gmtoff) - tti.isdst = isdst - tti.abbr = abbr[abbrind:abbr.find('\x00', abbrind)] - tti.isstd = (ttisstdcnt > i and isstd[i] != 0) - tti.isgmt = (ttisgmtcnt > i and isgmt[i] != 0) - out.ttinfo_list.append(tti) - - # Replace ttinfo indexes for ttinfo objects. - out.trans_idx = [out.ttinfo_list[idx] for idx in out.trans_idx] - - # Set standard, dst, and before ttinfos. before will be - # used when a given time is before any transitions, - # and will be set to the first non-dst ttinfo, or to - # the first dst, if all of them are dst. - out.ttinfo_std = None - out.ttinfo_dst = None - out.ttinfo_before = None - if out.ttinfo_list: - if not out.trans_list_utc: - out.ttinfo_std = out.ttinfo_first = out.ttinfo_list[0] - else: - for i in range(timecnt-1, -1, -1): - tti = out.trans_idx[i] - if not out.ttinfo_std and not tti.isdst: - out.ttinfo_std = tti - elif not out.ttinfo_dst and tti.isdst: - out.ttinfo_dst = tti - - if out.ttinfo_std and out.ttinfo_dst: - break - else: - if out.ttinfo_dst and not out.ttinfo_std: - out.ttinfo_std = out.ttinfo_dst - - for tti in out.ttinfo_list: - if not tti.isdst: - out.ttinfo_before = tti - break - else: - out.ttinfo_before = out.ttinfo_list[0] - - # Now fix transition times to become relative to wall time. - # - # I'm not sure about this. In my tests, the tz source file - # is setup to wall time, and in the binary file isstd and - # isgmt are off, so it should be in wall time. OTOH, it's - # always in gmt time. Let me know if you have comments - # about this. - lastdst = None - lastoffset = None - lastdstoffset = None - lastbaseoffset = None - out.trans_list = [] - - for i, tti in enumerate(out.trans_idx): - offset = tti.offset - dstoffset = 0 - - if lastdst is not None: - if tti.isdst: - if not lastdst: - dstoffset = offset - lastoffset - - if not dstoffset and lastdstoffset: - dstoffset = lastdstoffset - - tti.dstoffset = datetime.timedelta(seconds=dstoffset) - lastdstoffset = dstoffset - - # If a time zone changes its base offset during a DST transition, - # then you need to adjust by the previous base offset to get the - # transition time in local time. Otherwise you use the current - # base offset. Ideally, I would have some mathematical proof of - # why this is true, but I haven't really thought about it enough. - baseoffset = offset - dstoffset - adjustment = baseoffset - if (lastbaseoffset is not None and baseoffset != lastbaseoffset - and tti.isdst != lastdst): - # The base DST has changed - adjustment = lastbaseoffset - - lastdst = tti.isdst - lastoffset = offset - lastbaseoffset = baseoffset - - out.trans_list.append(out.trans_list_utc[i] + adjustment) - - out.trans_idx = tuple(out.trans_idx) - out.trans_list = tuple(out.trans_list) - out.trans_list_utc = tuple(out.trans_list_utc) - - return out - - def _find_last_transition(self, dt, in_utc=False): - # If there's no list, there are no transitions to find - if not self._trans_list: - return None - - timestamp = _datetime_to_timestamp(dt) - - # Find where the timestamp fits in the transition list - if the - # timestamp is a transition time, it's part of the "after" period. - trans_list = self._trans_list_utc if in_utc else self._trans_list - idx = bisect.bisect_right(trans_list, timestamp) - - # We want to know when the previous transition was, so subtract off 1 - return idx - 1 - - def _get_ttinfo(self, idx): - # For no list or after the last transition, default to _ttinfo_std - if idx is None or (idx + 1) >= len(self._trans_list): - return self._ttinfo_std - - # If there is a list and the time is before it, return _ttinfo_before - if idx < 0: - return self._ttinfo_before - - return self._trans_idx[idx] - - def _find_ttinfo(self, dt): - idx = self._resolve_ambiguous_time(dt) - - return self._get_ttinfo(idx) - - def fromutc(self, dt): - """ - The ``tzfile`` implementation of :py:func:`datetime.tzinfo.fromutc`. - - :param dt: - A :py:class:`datetime.datetime` object. - - :raises TypeError: - Raised if ``dt`` is not a :py:class:`datetime.datetime` object. - - :raises ValueError: - Raised if this is called with a ``dt`` which does not have this - ``tzinfo`` attached. - - :return: - Returns a :py:class:`datetime.datetime` object representing the - wall time in ``self``'s time zone. - """ - # These isinstance checks are in datetime.tzinfo, so we'll preserve - # them, even if we don't care about duck typing. - if not isinstance(dt, datetime.datetime): - raise TypeError("fromutc() requires a datetime argument") - - if dt.tzinfo is not self: - raise ValueError("dt.tzinfo is not self") - - # First treat UTC as wall time and get the transition we're in. - idx = self._find_last_transition(dt, in_utc=True) - tti = self._get_ttinfo(idx) - - dt_out = dt + datetime.timedelta(seconds=tti.offset) - - fold = self.is_ambiguous(dt_out, idx=idx) - - return enfold(dt_out, fold=int(fold)) - - def is_ambiguous(self, dt, idx=None): - """ - Whether or not the "wall time" of a given datetime is ambiguous in this - zone. - - :param dt: - A :py:class:`datetime.datetime`, naive or time zone aware. - - - :return: - Returns ``True`` if ambiguous, ``False`` otherwise. - - .. versionadded:: 2.6.0 - """ - if idx is None: - idx = self._find_last_transition(dt) - - # Calculate the difference in offsets from current to previous - timestamp = _datetime_to_timestamp(dt) - tti = self._get_ttinfo(idx) - - if idx is None or idx <= 0: - return False - - od = self._get_ttinfo(idx - 1).offset - tti.offset - tt = self._trans_list[idx] # Transition time - - return timestamp < tt + od - - def _resolve_ambiguous_time(self, dt): - idx = self._find_last_transition(dt) - - # If we have no transitions, return the index - _fold = self._fold(dt) - if idx is None or idx == 0: - return idx - - # If it's ambiguous and we're in a fold, shift to a different index. - idx_offset = int(not _fold and self.is_ambiguous(dt, idx)) - - return idx - idx_offset - - def utcoffset(self, dt): - if dt is None: - return None - - if not self._ttinfo_std: - return ZERO - - return self._find_ttinfo(dt).delta - - def dst(self, dt): - if dt is None: - return None - - if not self._ttinfo_dst: - return ZERO - - tti = self._find_ttinfo(dt) - - if not tti.isdst: - return ZERO - - # The documentation says that utcoffset()-dst() must - # be constant for every dt. - return tti.dstoffset - - @tzname_in_python2 - def tzname(self, dt): - if not self._ttinfo_std or dt is None: - return None - return self._find_ttinfo(dt).abbr - - def __eq__(self, other): - if not isinstance(other, tzfile): - return NotImplemented - return (self._trans_list == other._trans_list and - self._trans_idx == other._trans_idx and - self._ttinfo_list == other._ttinfo_list) - - __hash__ = None - - def __ne__(self, other): - return not (self == other) - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, repr(self._filename)) - - def __reduce__(self): - return self.__reduce_ex__(None) - - def __reduce_ex__(self, protocol): - return (self.__class__, (None, self._filename), self.__dict__) - - -class tzrange(tzrangebase): - """ - The ``tzrange`` object is a time zone specified by a set of offsets and - abbreviations, equivalent to the way the ``TZ`` variable can be specified - in POSIX-like systems, but using Python delta objects to specify DST - start, end and offsets. - - :param stdabbr: - The abbreviation for standard time (e.g. ``'EST'``). - - :param stdoffset: - An integer or :class:`datetime.timedelta` object or equivalent - specifying the base offset from UTC. - - If unspecified, +00:00 is used. - - :param dstabbr: - The abbreviation for DST / "Summer" time (e.g. ``'EDT'``). - - If specified, with no other DST information, DST is assumed to occur - and the default behavior or ``dstoffset``, ``start`` and ``end`` is - used. If unspecified and no other DST information is specified, it - is assumed that this zone has no DST. - - If this is unspecified and other DST information is *is* specified, - DST occurs in the zone but the time zone abbreviation is left - unchanged. - - :param dstoffset: - A an integer or :class:`datetime.timedelta` object or equivalent - specifying the UTC offset during DST. If unspecified and any other DST - information is specified, it is assumed to be the STD offset +1 hour. - - :param start: - A :class:`relativedelta.relativedelta` object or equivalent specifying - the time and time of year that daylight savings time starts. To - specify, for example, that DST starts at 2AM on the 2nd Sunday in - March, pass: - - ``relativedelta(hours=2, month=3, day=1, weekday=SU(+2))`` - - If unspecified and any other DST information is specified, the default - value is 2 AM on the first Sunday in April. - - :param end: - A :class:`relativedelta.relativedelta` object or equivalent - representing the time and time of year that daylight savings time - ends, with the same specification method as in ``start``. One note is - that this should point to the first time in the *standard* zone, so if - a transition occurs at 2AM in the DST zone and the clocks are set back - 1 hour to 1AM, set the ``hours`` parameter to +1. - - - **Examples:** - - .. testsetup:: tzrange - - from dateutil.tz import tzrange, tzstr - - .. doctest:: tzrange - - >>> tzstr('EST5EDT') == tzrange("EST", -18000, "EDT") - True - - >>> from dateutil.relativedelta import * - >>> range1 = tzrange("EST", -18000, "EDT") - >>> range2 = tzrange("EST", -18000, "EDT", -14400, - ... relativedelta(hours=+2, month=4, day=1, - ... weekday=SU(+1)), - ... relativedelta(hours=+1, month=10, day=31, - ... weekday=SU(-1))) - >>> tzstr('EST5EDT') == range1 == range2 - True - - """ - def __init__(self, stdabbr, stdoffset=None, - dstabbr=None, dstoffset=None, - start=None, end=None): - - global relativedelta - from dateutil import relativedelta - - self._std_abbr = stdabbr - self._dst_abbr = dstabbr - - try: - stdoffset = stdoffset.total_seconds() - except (TypeError, AttributeError): - pass - - try: - dstoffset = dstoffset.total_seconds() - except (TypeError, AttributeError): - pass - - if stdoffset is not None: - self._std_offset = datetime.timedelta(seconds=stdoffset) - else: - self._std_offset = ZERO - - if dstoffset is not None: - self._dst_offset = datetime.timedelta(seconds=dstoffset) - elif dstabbr and stdoffset is not None: - self._dst_offset = self._std_offset + datetime.timedelta(hours=+1) - else: - self._dst_offset = ZERO - - if dstabbr and start is None: - self._start_delta = relativedelta.relativedelta( - hours=+2, month=4, day=1, weekday=relativedelta.SU(+1)) - else: - self._start_delta = start - - if dstabbr and end is None: - self._end_delta = relativedelta.relativedelta( - hours=+1, month=10, day=31, weekday=relativedelta.SU(-1)) - else: - self._end_delta = end - - self._dst_base_offset_ = self._dst_offset - self._std_offset - self.hasdst = bool(self._start_delta) - - def transitions(self, year): - """ - For a given year, get the DST on and off transition times, expressed - always on the standard time side. For zones with no transitions, this - function returns ``None``. - - :param year: - The year whose transitions you would like to query. - - :return: - Returns a :class:`tuple` of :class:`datetime.datetime` objects, - ``(dston, dstoff)`` for zones with an annual DST transition, or - ``None`` for fixed offset zones. - """ - if not self.hasdst: - return None - - base_year = datetime.datetime(year, 1, 1) - - start = base_year + self._start_delta - end = base_year + self._end_delta - - return (start, end) - - def __eq__(self, other): - if not isinstance(other, tzrange): - return NotImplemented - - return (self._std_abbr == other._std_abbr and - self._dst_abbr == other._dst_abbr and - self._std_offset == other._std_offset and - self._dst_offset == other._dst_offset and - self._start_delta == other._start_delta and - self._end_delta == other._end_delta) - - @property - def _dst_base_offset(self): - return self._dst_base_offset_ - - -@six.add_metaclass(_TzStrFactory) -class tzstr(tzrange): - """ - ``tzstr`` objects are time zone objects specified by a time-zone string as - it would be passed to a ``TZ`` variable on POSIX-style systems (see - the `GNU C Library: TZ Variable`_ for more details). - - There is one notable exception, which is that POSIX-style time zones use an - inverted offset format, so normally ``GMT+3`` would be parsed as an offset - 3 hours *behind* GMT. The ``tzstr`` time zone object will parse this as an - offset 3 hours *ahead* of GMT. If you would like to maintain the POSIX - behavior, pass a ``True`` value to ``posix_offset``. - - The :class:`tzrange` object provides the same functionality, but is - specified using :class:`relativedelta.relativedelta` objects. rather than - strings. - - :param s: - A time zone string in ``TZ`` variable format. This can be a - :class:`bytes` (2.x: :class:`str`), :class:`str` (2.x: - :class:`unicode`) or a stream emitting unicode characters - (e.g. :class:`StringIO`). - - :param posix_offset: - Optional. If set to ``True``, interpret strings such as ``GMT+3`` or - ``UTC+3`` as being 3 hours *behind* UTC rather than ahead, per the - POSIX standard. - - .. caution:: - - Prior to version 2.7.0, this function also supported time zones - in the format: - - * ``EST5EDT,4,0,6,7200,10,0,26,7200,3600`` - * ``EST5EDT,4,1,0,7200,10,-1,0,7200,3600`` - - This format is non-standard and has been deprecated; this function - will raise a :class:`DeprecatedTZFormatWarning` until - support is removed in a future version. - - .. _`GNU C Library: TZ Variable`: - https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html - """ - def __init__(self, s, posix_offset=False): - global parser - from dateutil.parser import _parser as parser - - self._s = s - - res = parser._parsetz(s) - if res is None or res.any_unused_tokens: - raise ValueError("unknown string format") - - # Here we break the compatibility with the TZ variable handling. - # GMT-3 actually *means* the timezone -3. - if res.stdabbr in ("GMT", "UTC") and not posix_offset: - res.stdoffset *= -1 - - # We must initialize it first, since _delta() needs - # _std_offset and _dst_offset set. Use False in start/end - # to avoid building it two times. - tzrange.__init__(self, res.stdabbr, res.stdoffset, - res.dstabbr, res.dstoffset, - start=False, end=False) - - if not res.dstabbr: - self._start_delta = None - self._end_delta = None - else: - self._start_delta = self._delta(res.start) - if self._start_delta: - self._end_delta = self._delta(res.end, isend=1) - - self.hasdst = bool(self._start_delta) - - def _delta(self, x, isend=0): - from dateutil import relativedelta - kwargs = {} - if x.month is not None: - kwargs["month"] = x.month - if x.weekday is not None: - kwargs["weekday"] = relativedelta.weekday(x.weekday, x.week) - if x.week > 0: - kwargs["day"] = 1 - else: - kwargs["day"] = 31 - elif x.day: - kwargs["day"] = x.day - elif x.yday is not None: - kwargs["yearday"] = x.yday - elif x.jyday is not None: - kwargs["nlyearday"] = x.jyday - if not kwargs: - # Default is to start on first sunday of april, and end - # on last sunday of october. - if not isend: - kwargs["month"] = 4 - kwargs["day"] = 1 - kwargs["weekday"] = relativedelta.SU(+1) - else: - kwargs["month"] = 10 - kwargs["day"] = 31 - kwargs["weekday"] = relativedelta.SU(-1) - if x.time is not None: - kwargs["seconds"] = x.time - else: - # Default is 2AM. - kwargs["seconds"] = 7200 - if isend: - # Convert to standard time, to follow the documented way - # of working with the extra hour. See the documentation - # of the tzinfo class. - delta = self._dst_offset - self._std_offset - kwargs["seconds"] -= delta.seconds + delta.days * 86400 - return relativedelta.relativedelta(**kwargs) - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, repr(self._s)) - - -class _tzicalvtzcomp(object): - def __init__(self, tzoffsetfrom, tzoffsetto, isdst, - tzname=None, rrule=None): - self.tzoffsetfrom = datetime.timedelta(seconds=tzoffsetfrom) - self.tzoffsetto = datetime.timedelta(seconds=tzoffsetto) - self.tzoffsetdiff = self.tzoffsetto - self.tzoffsetfrom - self.isdst = isdst - self.tzname = tzname - self.rrule = rrule - - -class _tzicalvtz(_tzinfo): - def __init__(self, tzid, comps=[]): - super(_tzicalvtz, self).__init__() - - self._tzid = tzid - self._comps = comps - self._cachedate = [] - self._cachecomp = [] - self._cache_lock = _thread.allocate_lock() - - def _find_comp(self, dt): - if len(self._comps) == 1: - return self._comps[0] - - dt = dt.replace(tzinfo=None) - - try: - with self._cache_lock: - return self._cachecomp[self._cachedate.index( - (dt, self._fold(dt)))] - except ValueError: - pass - - lastcompdt = None - lastcomp = None - - for comp in self._comps: - compdt = self._find_compdt(comp, dt) - - if compdt and (not lastcompdt or lastcompdt < compdt): - lastcompdt = compdt - lastcomp = comp - - if not lastcomp: - # RFC says nothing about what to do when a given - # time is before the first onset date. We'll look for the - # first standard component, or the first component, if - # none is found. - for comp in self._comps: - if not comp.isdst: - lastcomp = comp - break - else: - lastcomp = comp[0] - - with self._cache_lock: - self._cachedate.insert(0, (dt, self._fold(dt))) - self._cachecomp.insert(0, lastcomp) - - if len(self._cachedate) > 10: - self._cachedate.pop() - self._cachecomp.pop() - - return lastcomp - - def _find_compdt(self, comp, dt): - if comp.tzoffsetdiff < ZERO and self._fold(dt): - dt -= comp.tzoffsetdiff - - compdt = comp.rrule.before(dt, inc=True) - - return compdt - - def utcoffset(self, dt): - if dt is None: - return None - - return self._find_comp(dt).tzoffsetto - - def dst(self, dt): - comp = self._find_comp(dt) - if comp.isdst: - return comp.tzoffsetdiff - else: - return ZERO - - @tzname_in_python2 - def tzname(self, dt): - return self._find_comp(dt).tzname - - def __repr__(self): - return "" % repr(self._tzid) - - __reduce__ = object.__reduce__ - - -class tzical(object): - """ - This object is designed to parse an iCalendar-style ``VTIMEZONE`` structure - as set out in `RFC 5545`_ Section 4.6.5 into one or more `tzinfo` objects. - - :param `fileobj`: - A file or stream in iCalendar format, which should be UTF-8 encoded - with CRLF endings. - - .. _`RFC 5545`: https://tools.ietf.org/html/rfc5545 - """ - def __init__(self, fileobj): - global rrule - from dateutil import rrule - - if isinstance(fileobj, string_types): - self._s = fileobj - # ical should be encoded in UTF-8 with CRLF - fileobj = open(fileobj, 'r') - else: - self._s = getattr(fileobj, 'name', repr(fileobj)) - fileobj = _nullcontext(fileobj) - - self._vtz = {} - - with fileobj as fobj: - self._parse_rfc(fobj.read()) - - def keys(self): - """ - Retrieves the available time zones as a list. - """ - return list(self._vtz.keys()) - - def get(self, tzid=None): - """ - Retrieve a :py:class:`datetime.tzinfo` object by its ``tzid``. - - :param tzid: - If there is exactly one time zone available, omitting ``tzid`` - or passing :py:const:`None` value returns it. Otherwise a valid - key (which can be retrieved from :func:`keys`) is required. - - :raises ValueError: - Raised if ``tzid`` is not specified but there are either more - or fewer than 1 zone defined. - - :returns: - Returns either a :py:class:`datetime.tzinfo` object representing - the relevant time zone or :py:const:`None` if the ``tzid`` was - not found. - """ - if tzid is None: - if len(self._vtz) == 0: - raise ValueError("no timezones defined") - elif len(self._vtz) > 1: - raise ValueError("more than one timezone available") - tzid = next(iter(self._vtz)) - - return self._vtz.get(tzid) - - def _parse_offset(self, s): - s = s.strip() - if not s: - raise ValueError("empty offset") - if s[0] in ('+', '-'): - signal = (-1, +1)[s[0] == '+'] - s = s[1:] - else: - signal = +1 - if len(s) == 4: - return (int(s[:2]) * 3600 + int(s[2:]) * 60) * signal - elif len(s) == 6: - return (int(s[:2]) * 3600 + int(s[2:4]) * 60 + int(s[4:])) * signal - else: - raise ValueError("invalid offset: " + s) - - def _parse_rfc(self, s): - lines = s.splitlines() - if not lines: - raise ValueError("empty string") - - # Unfold - i = 0 - while i < len(lines): - line = lines[i].rstrip() - if not line: - del lines[i] - elif i > 0 and line[0] == " ": - lines[i-1] += line[1:] - del lines[i] - else: - i += 1 - - tzid = None - comps = [] - invtz = False - comptype = None - for line in lines: - if not line: - continue - name, value = line.split(':', 1) - parms = name.split(';') - if not parms: - raise ValueError("empty property name") - name = parms[0].upper() - parms = parms[1:] - if invtz: - if name == "BEGIN": - if value in ("STANDARD", "DAYLIGHT"): - # Process component - pass - else: - raise ValueError("unknown component: "+value) - comptype = value - founddtstart = False - tzoffsetfrom = None - tzoffsetto = None - rrulelines = [] - tzname = None - elif name == "END": - if value == "VTIMEZONE": - if comptype: - raise ValueError("component not closed: "+comptype) - if not tzid: - raise ValueError("mandatory TZID not found") - if not comps: - raise ValueError( - "at least one component is needed") - # Process vtimezone - self._vtz[tzid] = _tzicalvtz(tzid, comps) - invtz = False - elif value == comptype: - if not founddtstart: - raise ValueError("mandatory DTSTART not found") - if tzoffsetfrom is None: - raise ValueError( - "mandatory TZOFFSETFROM not found") - if tzoffsetto is None: - raise ValueError( - "mandatory TZOFFSETFROM not found") - # Process component - rr = None - if rrulelines: - rr = rrule.rrulestr("\n".join(rrulelines), - compatible=True, - ignoretz=True, - cache=True) - comp = _tzicalvtzcomp(tzoffsetfrom, tzoffsetto, - (comptype == "DAYLIGHT"), - tzname, rr) - comps.append(comp) - comptype = None - else: - raise ValueError("invalid component end: "+value) - elif comptype: - if name == "DTSTART": - # DTSTART in VTIMEZONE takes a subset of valid RRULE - # values under RFC 5545. - for parm in parms: - if parm != 'VALUE=DATE-TIME': - msg = ('Unsupported DTSTART param in ' + - 'VTIMEZONE: ' + parm) - raise ValueError(msg) - rrulelines.append(line) - founddtstart = True - elif name in ("RRULE", "RDATE", "EXRULE", "EXDATE"): - rrulelines.append(line) - elif name == "TZOFFSETFROM": - if parms: - raise ValueError( - "unsupported %s parm: %s " % (name, parms[0])) - tzoffsetfrom = self._parse_offset(value) - elif name == "TZOFFSETTO": - if parms: - raise ValueError( - "unsupported TZOFFSETTO parm: "+parms[0]) - tzoffsetto = self._parse_offset(value) - elif name == "TZNAME": - if parms: - raise ValueError( - "unsupported TZNAME parm: "+parms[0]) - tzname = value - elif name == "COMMENT": - pass - else: - raise ValueError("unsupported property: "+name) - else: - if name == "TZID": - if parms: - raise ValueError( - "unsupported TZID parm: "+parms[0]) - tzid = value - elif name in ("TZURL", "LAST-MODIFIED", "COMMENT"): - pass - else: - raise ValueError("unsupported property: "+name) - elif name == "BEGIN" and value == "VTIMEZONE": - tzid = None - comps = [] - invtz = True - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, repr(self._s)) - - -if sys.platform != "win32": - TZFILES = ["/etc/localtime", "localtime"] - TZPATHS = ["/usr/share/zoneinfo", - "/usr/lib/zoneinfo", - "/usr/share/lib/zoneinfo", - "/etc/zoneinfo"] -else: - TZFILES = [] - TZPATHS = [] - - -def __get_gettz(): - tzlocal_classes = (tzlocal,) - if tzwinlocal is not None: - tzlocal_classes += (tzwinlocal,) - - class GettzFunc(object): - """ - Retrieve a time zone object from a string representation - - This function is intended to retrieve the :py:class:`tzinfo` subclass - that best represents the time zone that would be used if a POSIX - `TZ variable`_ were set to the same value. - - If no argument or an empty string is passed to ``gettz``, local time - is returned: - - .. code-block:: python3 - - >>> gettz() - tzfile('/etc/localtime') - - This function is also the preferred way to map IANA tz database keys - to :class:`tzfile` objects: - - .. code-block:: python3 - - >>> gettz('Pacific/Kiritimati') - tzfile('/usr/share/zoneinfo/Pacific/Kiritimati') - - On Windows, the standard is extended to include the Windows-specific - zone names provided by the operating system: - - .. code-block:: python3 - - >>> gettz('Egypt Standard Time') - tzwin('Egypt Standard Time') - - Passing a GNU ``TZ`` style string time zone specification returns a - :class:`tzstr` object: - - .. code-block:: python3 - - >>> gettz('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3') - tzstr('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3') - - :param name: - A time zone name (IANA, or, on Windows, Windows keys), location of - a ``tzfile(5)`` zoneinfo file or ``TZ`` variable style time zone - specifier. An empty string, no argument or ``None`` is interpreted - as local time. - - :return: - Returns an instance of one of ``dateutil``'s :py:class:`tzinfo` - subclasses. - - .. versionchanged:: 2.7.0 - - After version 2.7.0, any two calls to ``gettz`` using the same - input strings will return the same object: - - .. code-block:: python3 - - >>> tz.gettz('America/Chicago') is tz.gettz('America/Chicago') - True - - In addition to improving performance, this ensures that - `"same zone" semantics`_ are used for datetimes in the same zone. - - - .. _`TZ variable`: - https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html - - .. _`"same zone" semantics`: - https://blog.ganssle.io/articles/2018/02/aware-datetime-arithmetic.html - """ - def __init__(self): - - self.__instances = weakref.WeakValueDictionary() - self.__strong_cache_size = 8 - self.__strong_cache = OrderedDict() - self._cache_lock = _thread.allocate_lock() - - def __call__(self, name=None): - with self._cache_lock: - rv = self.__instances.get(name, None) - - if rv is None: - rv = self.nocache(name=name) - if not (name is None - or isinstance(rv, tzlocal_classes) - or rv is None): - # tzlocal is slightly more complicated than the other - # time zone providers because it depends on environment - # at construction time, so don't cache that. - # - # We also cannot store weak references to None, so we - # will also not store that. - self.__instances[name] = rv - else: - # No need for strong caching, return immediately - return rv - - self.__strong_cache[name] = self.__strong_cache.pop(name, rv) - - if len(self.__strong_cache) > self.__strong_cache_size: - self.__strong_cache.popitem(last=False) - - return rv - - def set_cache_size(self, size): - with self._cache_lock: - self.__strong_cache_size = size - while len(self.__strong_cache) > size: - self.__strong_cache.popitem(last=False) - - def cache_clear(self): - with self._cache_lock: - self.__instances = weakref.WeakValueDictionary() - self.__strong_cache.clear() - - @staticmethod - def nocache(name=None): - """A non-cached version of gettz""" - tz = None - if not name: - try: - name = os.environ["TZ"] - except KeyError: - pass - if name is None or name == ":": - for filepath in TZFILES: - if not os.path.isabs(filepath): - filename = filepath - for path in TZPATHS: - filepath = os.path.join(path, filename) - if os.path.isfile(filepath): - break - else: - continue - if os.path.isfile(filepath): - try: - tz = tzfile(filepath) - break - except (IOError, OSError, ValueError): - pass - else: - tz = tzlocal() - else: - try: - if name.startswith(":"): - name = name[1:] - except TypeError as e: - if isinstance(name, bytes): - new_msg = "gettz argument should be str, not bytes" - six.raise_from(TypeError(new_msg), e) - else: - raise - if os.path.isabs(name): - if os.path.isfile(name): - tz = tzfile(name) - else: - tz = None - else: - for path in TZPATHS: - filepath = os.path.join(path, name) - if not os.path.isfile(filepath): - filepath = filepath.replace(' ', '_') - if not os.path.isfile(filepath): - continue - try: - tz = tzfile(filepath) - break - except (IOError, OSError, ValueError): - pass - else: - tz = None - if tzwin is not None: - try: - tz = tzwin(name) - except (WindowsError, UnicodeEncodeError): - # UnicodeEncodeError is for Python 2.7 compat - tz = None - - if not tz: - from dateutil.zoneinfo import get_zonefile_instance - tz = get_zonefile_instance().get(name) - - if not tz: - for c in name: - # name is not a tzstr unless it has at least - # one offset. For short values of "name", an - # explicit for loop seems to be the fastest way - # To determine if a string contains a digit - if c in "0123456789": - try: - tz = tzstr(name) - except ValueError: - pass - break - else: - if name in ("GMT", "UTC"): - tz = UTC - elif name in time.tzname: - tz = tzlocal() - return tz - - return GettzFunc() - - -gettz = __get_gettz() -del __get_gettz - - -def datetime_exists(dt, tz=None): - """ - Given a datetime and a time zone, determine whether or not a given datetime - would fall in a gap. - - :param dt: - A :class:`datetime.datetime` (whose time zone will be ignored if ``tz`` - is provided.) - - :param tz: - A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If - ``None`` or not provided, the datetime's own time zone will be used. - - :return: - Returns a boolean value whether or not the "wall time" exists in - ``tz``. - - .. versionadded:: 2.7.0 - """ - if tz is None: - if dt.tzinfo is None: - raise ValueError('Datetime is naive and no time zone provided.') - tz = dt.tzinfo - - dt = dt.replace(tzinfo=None) - - # This is essentially a test of whether or not the datetime can survive - # a round trip to UTC. - dt_rt = dt.replace(tzinfo=tz).astimezone(UTC).astimezone(tz) - dt_rt = dt_rt.replace(tzinfo=None) - - return dt == dt_rt - - -def datetime_ambiguous(dt, tz=None): - """ - Given a datetime and a time zone, determine whether or not a given datetime - is ambiguous (i.e if there are two times differentiated only by their DST - status). - - :param dt: - A :class:`datetime.datetime` (whose time zone will be ignored if ``tz`` - is provided.) - - :param tz: - A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If - ``None`` or not provided, the datetime's own time zone will be used. - - :return: - Returns a boolean value whether or not the "wall time" is ambiguous in - ``tz``. - - .. versionadded:: 2.6.0 - """ - if tz is None: - if dt.tzinfo is None: - raise ValueError('Datetime is naive and no time zone provided.') - - tz = dt.tzinfo - - # If a time zone defines its own "is_ambiguous" function, we'll use that. - is_ambiguous_fn = getattr(tz, 'is_ambiguous', None) - if is_ambiguous_fn is not None: - try: - return tz.is_ambiguous(dt) - except Exception: - pass - - # If it doesn't come out and tell us it's ambiguous, we'll just check if - # the fold attribute has any effect on this particular date and time. - dt = dt.replace(tzinfo=tz) - wall_0 = enfold(dt, fold=0) - wall_1 = enfold(dt, fold=1) - - same_offset = wall_0.utcoffset() == wall_1.utcoffset() - same_dst = wall_0.dst() == wall_1.dst() - - return not (same_offset and same_dst) - - -def resolve_imaginary(dt): - """ - Given a datetime that may be imaginary, return an existing datetime. - - This function assumes that an imaginary datetime represents what the - wall time would be in a zone had the offset transition not occurred, so - it will always fall forward by the transition's change in offset. - - .. doctest:: - - >>> from dateutil import tz - >>> from datetime import datetime - >>> NYC = tz.gettz('America/New_York') - >>> print(tz.resolve_imaginary(datetime(2017, 3, 12, 2, 30, tzinfo=NYC))) - 2017-03-12 03:30:00-04:00 - - >>> KIR = tz.gettz('Pacific/Kiritimati') - >>> print(tz.resolve_imaginary(datetime(1995, 1, 1, 12, 30, tzinfo=KIR))) - 1995-01-02 12:30:00+14:00 - - As a note, :func:`datetime.astimezone` is guaranteed to produce a valid, - existing datetime, so a round-trip to and from UTC is sufficient to get - an extant datetime, however, this generally "falls back" to an earlier time - rather than falling forward to the STD side (though no guarantees are made - about this behavior). - - :param dt: - A :class:`datetime.datetime` which may or may not exist. - - :return: - Returns an existing :class:`datetime.datetime`. If ``dt`` was not - imaginary, the datetime returned is guaranteed to be the same object - passed to the function. - - .. versionadded:: 2.7.0 - """ - if dt.tzinfo is not None and not datetime_exists(dt): - - curr_offset = (dt + datetime.timedelta(hours=24)).utcoffset() - old_offset = (dt - datetime.timedelta(hours=24)).utcoffset() - - dt += curr_offset - old_offset - - return dt - - -def _datetime_to_timestamp(dt): - """ - Convert a :class:`datetime.datetime` object to an epoch timestamp in - seconds since January 1, 1970, ignoring the time zone. - """ - return (dt.replace(tzinfo=None) - EPOCH).total_seconds() - - -if sys.version_info >= (3, 6): - def _get_supported_offset(second_offset): - return second_offset -else: - def _get_supported_offset(second_offset): - # For python pre-3.6, round to full-minutes if that's not the case. - # Python's datetime doesn't accept sub-minute timezones. Check - # http://python.org/sf/1447945 or https://bugs.python.org/issue5288 - # for some information. - old_offset = second_offset - calculated_offset = 60 * ((second_offset + 30) // 60) - return calculated_offset - - -try: - # Python 3.7 feature - from contextlib import nullcontext as _nullcontext -except ImportError: - class _nullcontext(object): - """ - Class for wrapping contexts so that they are passed through in a - with statement. - """ - def __init__(self, context): - self.context = context - - def __enter__(self): - return self.context - - def __exit__(*args, **kwargs): - pass - -# vim:ts=4:sw=4:et diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/win.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/win.py deleted file mode 100644 index cde07ba..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tz/win.py +++ /dev/null @@ -1,370 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module provides an interface to the native time zone data on Windows, -including :py:class:`datetime.tzinfo` implementations. - -Attempting to import this module on a non-Windows platform will raise an -:py:obj:`ImportError`. -""" -# This code was originally contributed by Jeffrey Harris. -import datetime -import struct - -from six.moves import winreg -from six import text_type - -try: - import ctypes - from ctypes import wintypes -except ValueError: - # ValueError is raised on non-Windows systems for some horrible reason. - raise ImportError("Running tzwin on non-Windows system") - -from ._common import tzrangebase - -__all__ = ["tzwin", "tzwinlocal", "tzres"] - -ONEWEEK = datetime.timedelta(7) - -TZKEYNAMENT = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones" -TZKEYNAME9X = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones" -TZLOCALKEYNAME = r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation" - - -def _settzkeyname(): - handle = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) - try: - winreg.OpenKey(handle, TZKEYNAMENT).Close() - TZKEYNAME = TZKEYNAMENT - except WindowsError: - TZKEYNAME = TZKEYNAME9X - handle.Close() - return TZKEYNAME - - -TZKEYNAME = _settzkeyname() - - -class tzres(object): - """ - Class for accessing ``tzres.dll``, which contains timezone name related - resources. - - .. versionadded:: 2.5.0 - """ - p_wchar = ctypes.POINTER(wintypes.WCHAR) # Pointer to a wide char - - def __init__(self, tzres_loc='tzres.dll'): - # Load the user32 DLL so we can load strings from tzres - user32 = ctypes.WinDLL('user32') - - # Specify the LoadStringW function - user32.LoadStringW.argtypes = (wintypes.HINSTANCE, - wintypes.UINT, - wintypes.LPWSTR, - ctypes.c_int) - - self.LoadStringW = user32.LoadStringW - self._tzres = ctypes.WinDLL(tzres_loc) - self.tzres_loc = tzres_loc - - def load_name(self, offset): - """ - Load a timezone name from a DLL offset (integer). - - >>> from dateutil.tzwin import tzres - >>> tzr = tzres() - >>> print(tzr.load_name(112)) - 'Eastern Standard Time' - - :param offset: - A positive integer value referring to a string from the tzres dll. - - .. note:: - - Offsets found in the registry are generally of the form - ``@tzres.dll,-114``. The offset in this case is 114, not -114. - - """ - resource = self.p_wchar() - lpBuffer = ctypes.cast(ctypes.byref(resource), wintypes.LPWSTR) - nchar = self.LoadStringW(self._tzres._handle, offset, lpBuffer, 0) - return resource[:nchar] - - def name_from_string(self, tzname_str): - """ - Parse strings as returned from the Windows registry into the time zone - name as defined in the registry. - - >>> from dateutil.tzwin import tzres - >>> tzr = tzres() - >>> print(tzr.name_from_string('@tzres.dll,-251')) - 'Dateline Daylight Time' - >>> print(tzr.name_from_string('Eastern Standard Time')) - 'Eastern Standard Time' - - :param tzname_str: - A timezone name string as returned from a Windows registry key. - - :return: - Returns the localized timezone string from tzres.dll if the string - is of the form `@tzres.dll,-offset`, else returns the input string. - """ - if not tzname_str.startswith('@'): - return tzname_str - - name_splt = tzname_str.split(',-') - try: - offset = int(name_splt[1]) - except: - raise ValueError("Malformed timezone string.") - - return self.load_name(offset) - - -class tzwinbase(tzrangebase): - """tzinfo class based on win32's timezones available in the registry.""" - def __init__(self): - raise NotImplementedError('tzwinbase is an abstract base class') - - def __eq__(self, other): - # Compare on all relevant dimensions, including name. - if not isinstance(other, tzwinbase): - return NotImplemented - - return (self._std_offset == other._std_offset and - self._dst_offset == other._dst_offset and - self._stddayofweek == other._stddayofweek and - self._dstdayofweek == other._dstdayofweek and - self._stdweeknumber == other._stdweeknumber and - self._dstweeknumber == other._dstweeknumber and - self._stdhour == other._stdhour and - self._dsthour == other._dsthour and - self._stdminute == other._stdminute and - self._dstminute == other._dstminute and - self._std_abbr == other._std_abbr and - self._dst_abbr == other._dst_abbr) - - @staticmethod - def list(): - """Return a list of all time zones known to the system.""" - with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: - with winreg.OpenKey(handle, TZKEYNAME) as tzkey: - result = [winreg.EnumKey(tzkey, i) - for i in range(winreg.QueryInfoKey(tzkey)[0])] - return result - - def display(self): - """ - Return the display name of the time zone. - """ - return self._display - - def transitions(self, year): - """ - For a given year, get the DST on and off transition times, expressed - always on the standard time side. For zones with no transitions, this - function returns ``None``. - - :param year: - The year whose transitions you would like to query. - - :return: - Returns a :class:`tuple` of :class:`datetime.datetime` objects, - ``(dston, dstoff)`` for zones with an annual DST transition, or - ``None`` for fixed offset zones. - """ - - if not self.hasdst: - return None - - dston = picknthweekday(year, self._dstmonth, self._dstdayofweek, - self._dsthour, self._dstminute, - self._dstweeknumber) - - dstoff = picknthweekday(year, self._stdmonth, self._stddayofweek, - self._stdhour, self._stdminute, - self._stdweeknumber) - - # Ambiguous dates default to the STD side - dstoff -= self._dst_base_offset - - return dston, dstoff - - def _get_hasdst(self): - return self._dstmonth != 0 - - @property - def _dst_base_offset(self): - return self._dst_base_offset_ - - -class tzwin(tzwinbase): - """ - Time zone object created from the zone info in the Windows registry - - These are similar to :py:class:`dateutil.tz.tzrange` objects in that - the time zone data is provided in the format of a single offset rule - for either 0 or 2 time zone transitions per year. - - :param: name - The name of a Windows time zone key, e.g. "Eastern Standard Time". - The full list of keys can be retrieved with :func:`tzwin.list`. - """ - - def __init__(self, name): - self._name = name - - with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: - tzkeyname = text_type("{kn}\\{name}").format(kn=TZKEYNAME, name=name) - with winreg.OpenKey(handle, tzkeyname) as tzkey: - keydict = valuestodict(tzkey) - - self._std_abbr = keydict["Std"] - self._dst_abbr = keydict["Dlt"] - - self._display = keydict["Display"] - - # See http://ww_winreg.jsiinc.com/SUBA/tip0300/rh0398.htm - tup = struct.unpack("=3l16h", keydict["TZI"]) - stdoffset = -tup[0]-tup[1] # Bias + StandardBias * -1 - dstoffset = stdoffset-tup[2] # + DaylightBias * -1 - self._std_offset = datetime.timedelta(minutes=stdoffset) - self._dst_offset = datetime.timedelta(minutes=dstoffset) - - # for the meaning see the win32 TIME_ZONE_INFORMATION structure docs - # http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspx - (self._stdmonth, - self._stddayofweek, # Sunday = 0 - self._stdweeknumber, # Last = 5 - self._stdhour, - self._stdminute) = tup[4:9] - - (self._dstmonth, - self._dstdayofweek, # Sunday = 0 - self._dstweeknumber, # Last = 5 - self._dsthour, - self._dstminute) = tup[12:17] - - self._dst_base_offset_ = self._dst_offset - self._std_offset - self.hasdst = self._get_hasdst() - - def __repr__(self): - return "tzwin(%s)" % repr(self._name) - - def __reduce__(self): - return (self.__class__, (self._name,)) - - -class tzwinlocal(tzwinbase): - """ - Class representing the local time zone information in the Windows registry - - While :class:`dateutil.tz.tzlocal` makes system calls (via the :mod:`time` - module) to retrieve time zone information, ``tzwinlocal`` retrieves the - rules directly from the Windows registry and creates an object like - :class:`dateutil.tz.tzwin`. - - Because Windows does not have an equivalent of :func:`time.tzset`, on - Windows, :class:`dateutil.tz.tzlocal` instances will always reflect the - time zone settings *at the time that the process was started*, meaning - changes to the machine's time zone settings during the run of a program - on Windows will **not** be reflected by :class:`dateutil.tz.tzlocal`. - Because ``tzwinlocal`` reads the registry directly, it is unaffected by - this issue. - """ - def __init__(self): - with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle: - with winreg.OpenKey(handle, TZLOCALKEYNAME) as tzlocalkey: - keydict = valuestodict(tzlocalkey) - - self._std_abbr = keydict["StandardName"] - self._dst_abbr = keydict["DaylightName"] - - try: - tzkeyname = text_type('{kn}\\{sn}').format(kn=TZKEYNAME, - sn=self._std_abbr) - with winreg.OpenKey(handle, tzkeyname) as tzkey: - _keydict = valuestodict(tzkey) - self._display = _keydict["Display"] - except OSError: - self._display = None - - stdoffset = -keydict["Bias"]-keydict["StandardBias"] - dstoffset = stdoffset-keydict["DaylightBias"] - - self._std_offset = datetime.timedelta(minutes=stdoffset) - self._dst_offset = datetime.timedelta(minutes=dstoffset) - - # For reasons unclear, in this particular key, the day of week has been - # moved to the END of the SYSTEMTIME structure. - tup = struct.unpack("=8h", keydict["StandardStart"]) - - (self._stdmonth, - self._stdweeknumber, # Last = 5 - self._stdhour, - self._stdminute) = tup[1:5] - - self._stddayofweek = tup[7] - - tup = struct.unpack("=8h", keydict["DaylightStart"]) - - (self._dstmonth, - self._dstweeknumber, # Last = 5 - self._dsthour, - self._dstminute) = tup[1:5] - - self._dstdayofweek = tup[7] - - self._dst_base_offset_ = self._dst_offset - self._std_offset - self.hasdst = self._get_hasdst() - - def __repr__(self): - return "tzwinlocal()" - - def __str__(self): - # str will return the standard name, not the daylight name. - return "tzwinlocal(%s)" % repr(self._std_abbr) - - def __reduce__(self): - return (self.__class__, ()) - - -def picknthweekday(year, month, dayofweek, hour, minute, whichweek): - """ dayofweek == 0 means Sunday, whichweek 5 means last instance """ - first = datetime.datetime(year, month, 1, hour, minute) - - # This will work if dayofweek is ISO weekday (1-7) or Microsoft-style (0-6), - # Because 7 % 7 = 0 - weekdayone = first.replace(day=((dayofweek - first.isoweekday()) % 7) + 1) - wd = weekdayone + ((whichweek - 1) * ONEWEEK) - if (wd.month != month): - wd -= ONEWEEK - - return wd - - -def valuestodict(key): - """Convert a registry key's values to a dictionary.""" - dout = {} - size = winreg.QueryInfoKey(key)[1] - tz_res = None - - for i in range(size): - key_name, value, dtype = winreg.EnumValue(key, i) - if dtype == winreg.REG_DWORD or dtype == winreg.REG_DWORD_LITTLE_ENDIAN: - # If it's a DWORD (32-bit integer), it's stored as unsigned - convert - # that to a proper signed integer - if value & (1 << 31): - value = value - (1 << 32) - elif dtype == winreg.REG_SZ: - # If it's a reference to the tzres DLL, load the actual string - if value.startswith('@tzres'): - tz_res = tz_res or tzres() - value = tz_res.name_from_string(value) - - value = value.rstrip('\x00') # Remove trailing nulls - - dout[key_name] = value - - return dout diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tzwin.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/tzwin.py deleted file mode 100644 index cebc673..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/tzwin.py +++ /dev/null @@ -1,2 +0,0 @@ -# tzwin has moved to dateutil.tz.win -from .tz.win import * diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/utils.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/utils.py deleted file mode 100644 index 44d9c99..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/utils.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module offers general convenience and utility functions for dealing with -datetimes. - -.. versionadded:: 2.7.0 -""" -from __future__ import unicode_literals - -from datetime import datetime, time - - -def today(tzinfo=None): - """ - Returns a :py:class:`datetime` representing the current day at midnight - - :param tzinfo: - The time zone to attach (also used to determine the current day). - - :return: - A :py:class:`datetime.datetime` object representing the current day - at midnight. - """ - - dt = datetime.now(tzinfo) - return datetime.combine(dt.date(), time(0, tzinfo=tzinfo)) - - -def default_tzinfo(dt, tzinfo): - """ - Sets the ``tzinfo`` parameter on naive datetimes only - - This is useful for example when you are provided a datetime that may have - either an implicit or explicit time zone, such as when parsing a time zone - string. - - .. doctest:: - - >>> from dateutil.tz import tzoffset - >>> from dateutil.parser import parse - >>> from dateutil.utils import default_tzinfo - >>> dflt_tz = tzoffset("EST", -18000) - >>> print(default_tzinfo(parse('2014-01-01 12:30 UTC'), dflt_tz)) - 2014-01-01 12:30:00+00:00 - >>> print(default_tzinfo(parse('2014-01-01 12:30'), dflt_tz)) - 2014-01-01 12:30:00-05:00 - - :param dt: - The datetime on which to replace the time zone - - :param tzinfo: - The :py:class:`datetime.tzinfo` subclass instance to assign to - ``dt`` if (and only if) it is naive. - - :return: - Returns an aware :py:class:`datetime.datetime`. - """ - if dt.tzinfo is not None: - return dt - else: - return dt.replace(tzinfo=tzinfo) - - -def within_delta(dt1, dt2, delta): - """ - Useful for comparing two datetimes that may a negilible difference - to be considered equal. - """ - delta = abs(delta) - difference = dt1 - dt2 - return -delta <= difference <= delta diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/__init__.py deleted file mode 100644 index 34f11ad..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/__init__.py +++ /dev/null @@ -1,167 +0,0 @@ -# -*- coding: utf-8 -*- -import warnings -import json - -from tarfile import TarFile -from pkgutil import get_data -from io import BytesIO - -from dateutil.tz import tzfile as _tzfile - -__all__ = ["get_zonefile_instance", "gettz", "gettz_db_metadata"] - -ZONEFILENAME = "dateutil-zoneinfo.tar.gz" -METADATA_FN = 'METADATA' - - -class tzfile(_tzfile): - def __reduce__(self): - return (gettz, (self._filename,)) - - -def getzoneinfofile_stream(): - try: - return BytesIO(get_data(__name__, ZONEFILENAME)) - except IOError as e: # TODO switch to FileNotFoundError? - warnings.warn("I/O error({0}): {1}".format(e.errno, e.strerror)) - return None - - -class ZoneInfoFile(object): - def __init__(self, zonefile_stream=None): - if zonefile_stream is not None: - with TarFile.open(fileobj=zonefile_stream) as tf: - self.zones = {zf.name: tzfile(tf.extractfile(zf), filename=zf.name) - for zf in tf.getmembers() - if zf.isfile() and zf.name != METADATA_FN} - # deal with links: They'll point to their parent object. Less - # waste of memory - links = {zl.name: self.zones[zl.linkname] - for zl in tf.getmembers() if - zl.islnk() or zl.issym()} - self.zones.update(links) - try: - metadata_json = tf.extractfile(tf.getmember(METADATA_FN)) - metadata_str = metadata_json.read().decode('UTF-8') - self.metadata = json.loads(metadata_str) - except KeyError: - # no metadata in tar file - self.metadata = None - else: - self.zones = {} - self.metadata = None - - def get(self, name, default=None): - """ - Wrapper for :func:`ZoneInfoFile.zones.get`. This is a convenience method - for retrieving zones from the zone dictionary. - - :param name: - The name of the zone to retrieve. (Generally IANA zone names) - - :param default: - The value to return in the event of a missing key. - - .. versionadded:: 2.6.0 - - """ - return self.zones.get(name, default) - - -# The current API has gettz as a module function, although in fact it taps into -# a stateful class. So as a workaround for now, without changing the API, we -# will create a new "global" class instance the first time a user requests a -# timezone. Ugly, but adheres to the api. -# -# TODO: Remove after deprecation period. -_CLASS_ZONE_INSTANCE = [] - - -def get_zonefile_instance(new_instance=False): - """ - This is a convenience function which provides a :class:`ZoneInfoFile` - instance using the data provided by the ``dateutil`` package. By default, it - caches a single instance of the ZoneInfoFile object and returns that. - - :param new_instance: - If ``True``, a new instance of :class:`ZoneInfoFile` is instantiated and - used as the cached instance for the next call. Otherwise, new instances - are created only as necessary. - - :return: - Returns a :class:`ZoneInfoFile` object. - - .. versionadded:: 2.6 - """ - if new_instance: - zif = None - else: - zif = getattr(get_zonefile_instance, '_cached_instance', None) - - if zif is None: - zif = ZoneInfoFile(getzoneinfofile_stream()) - - get_zonefile_instance._cached_instance = zif - - return zif - - -def gettz(name): - """ - This retrieves a time zone from the local zoneinfo tarball that is packaged - with dateutil. - - :param name: - An IANA-style time zone name, as found in the zoneinfo file. - - :return: - Returns a :class:`dateutil.tz.tzfile` time zone object. - - .. warning:: - It is generally inadvisable to use this function, and it is only - provided for API compatibility with earlier versions. This is *not* - equivalent to ``dateutil.tz.gettz()``, which selects an appropriate - time zone based on the inputs, favoring system zoneinfo. This is ONLY - for accessing the dateutil-specific zoneinfo (which may be out of - date compared to the system zoneinfo). - - .. deprecated:: 2.6 - If you need to use a specific zoneinfofile over the system zoneinfo, - instantiate a :class:`dateutil.zoneinfo.ZoneInfoFile` object and call - :func:`dateutil.zoneinfo.ZoneInfoFile.get(name)` instead. - - Use :func:`get_zonefile_instance` to retrieve an instance of the - dateutil-provided zoneinfo. - """ - warnings.warn("zoneinfo.gettz() will be removed in future versions, " - "to use the dateutil-provided zoneinfo files, instantiate a " - "ZoneInfoFile object and use ZoneInfoFile.zones.get() " - "instead. See the documentation for details.", - DeprecationWarning) - - if len(_CLASS_ZONE_INSTANCE) == 0: - _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream())) - return _CLASS_ZONE_INSTANCE[0].zones.get(name) - - -def gettz_db_metadata(): - """ Get the zonefile metadata - - See `zonefile_metadata`_ - - :returns: - A dictionary with the database metadata - - .. deprecated:: 2.6 - See deprecation warning in :func:`zoneinfo.gettz`. To get metadata, - query the attribute ``zoneinfo.ZoneInfoFile.metadata``. - """ - warnings.warn("zoneinfo.gettz_db_metadata() will be removed in future " - "versions, to use the dateutil-provided zoneinfo files, " - "ZoneInfoFile object and query the 'metadata' attribute " - "instead. See the documentation for details.", - DeprecationWarning) - - if len(_CLASS_ZONE_INSTANCE) == 0: - _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream())) - return _CLASS_ZONE_INSTANCE[0].metadata diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index cb0978b7f676f3f59e733046875a169c131201b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5662 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 Dq4M%7 diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz b/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz deleted file mode 100644 index 89e83517b562451622cea7cbe1dbfac5c3d2513e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153315 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%0D!KtMVr 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

yja~WxFc`yfrj%BE^ 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%0Ay}5phF%Yq4Q1qkIf-;CS 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 a$1xo%1ox9%9ceNF__ldZ2ky8&yz@WAsp(Gu diff --git a/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/rebuild.py b/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/rebuild.py deleted file mode 100644 index 78f0d1a..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/dateutil/zoneinfo/rebuild.py +++ /dev/null @@ -1,53 +0,0 @@ -import logging -import os -import tempfile -import shutil -import json -from subprocess import check_call -from tarfile import TarFile - -from dateutil.zoneinfo import METADATA_FN, ZONEFILENAME - - -def rebuild(filename, tag=None, format="gz", zonegroups=[], metadata=None): - """Rebuild the internal timezone info in dateutil/zoneinfo/zoneinfo*tar* - - filename is the timezone tarball from ``ftp.iana.org/tz``. - - """ - tmpdir = tempfile.mkdtemp() - zonedir = os.path.join(tmpdir, "zoneinfo") - moduledir = os.path.dirname(__file__) - try: - with TarFile.open(filename) as tf: - for name in zonegroups: - tf.extract(name, tmpdir) - filepaths = [os.path.join(tmpdir, n) for n in zonegroups] - try: - check_call(["zic", "-d", zonedir] + filepaths) - except OSError as e: - _print_on_nosuchfile(e) - raise - # write metadata file - with open(os.path.join(zonedir, METADATA_FN), 'w') as f: - json.dump(metadata, f, indent=4, sort_keys=True) - target = os.path.join(moduledir, ZONEFILENAME) - with TarFile.open(target, "w:%s" % format) as tf: - for entry in os.listdir(zonedir): - entrypath = os.path.join(zonedir, entry) - tf.add(entrypath, entry) - finally: - shutil.rmtree(tmpdir) - - -def _print_on_nosuchfile(e): - """Print helpful troubleshooting message - - e is an exception raised by subprocess.check_call() - - """ - if e.errno == 2: - logging.error( - "Could not find zic. Perhaps you need to install " - "libc-bin or some other package that provides it, " - "or it's not in your PATH?") diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/COPYING.txt b/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/COPYING.txt deleted file mode 100644 index bfc8937..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/COPYING.txt +++ /dev/null @@ -1,137 +0,0 @@ -================== - Copying Docutils -================== - -:Author: David Goodger -:Contact: goodger@python.org -:Date: $Date: 2015-05-08 17:56:32 +0200 (Fr, 08. Mai 2015) $ -:Web site: http://docutils.sourceforge.net/ -:Copyright: This document has been placed in the public domain. - -Most of the files included in this project have been placed in the -public domain, and therefore have no license requirements and no -restrictions on copying or usage; see the `Public Domain Dedication`_ -below. There are a few exceptions_, listed below. -Files in the Sandbox_ are not distributed with Docutils releases and -may have different license terms. - - -Public Domain Dedication -======================== - -The persons who have associated their work with this project (the -"Dedicator": David Goodger and the many contributors to the Docutils -project) hereby dedicate the entire copyright, less the exceptions_ -listed below, in the work of authorship known as "Docutils" identified -below (the "Work") to the public domain. - -The primary repository for the Work is the Internet World Wide Web -site . The Work consists of the -files within the "docutils" module of the Docutils project Subversion -repository (Internet host docutils.svn.sourceforge.net, filesystem path -/svnroot/docutils), whose Internet web interface is located at -. Files dedicated to the -public domain may be identified by the inclusion, near the beginning -of each file, of a declaration of the form:: - - Copyright: This document/module/DTD/stylesheet/file/etc. has been - placed in the public domain. - -Dedicator makes this dedication for the benefit of the public at large -and to the detriment of Dedicator's heirs and successors. Dedicator -intends this dedication to be an overt act of relinquishment in -perpetuity of all present and future rights under copyright law, -whether vested or contingent, in the Work. Dedicator understands that -such relinquishment of all rights includes the relinquishment of all -rights to enforce (by lawsuit or otherwise) those copyrights in the -Work. - -Dedicator recognizes that, once placed in the public domain, the Work -may be freely reproduced, distributed, transmitted, used, modified, -built upon, or otherwise exploited by anyone for any purpose, -commercial or non-commercial, and in any way, including by methods -that have not yet been invented or conceived. - -(This dedication is derived from the text of the `Creative Commons -Public Domain Dedication`. [#]_) - -.. [#] Creative Commons has `retired this legal tool`__ and does not - recommend that it be applied to works: This tool is based on United - States law and may not be applicable outside the US. For dedicating new - works to the public domain, Creative Commons recommend the replacement - Public Domain Dedication CC0_ (CC zero, "No Rights Reserved"). So does - the Free Software Foundation in its license-list_. - - __ http://creativecommons.org/retiredlicenses - .. _CC0: http://creativecommons.org/about/cc0 - -Exceptions -========== - -The exceptions to the `Public Domain Dedication`_ above are: - -* docutils/writers/s5_html/themes/default/iepngfix.htc: - - IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull - . Free usage permitted as long as - this notice remains intact. - -* docutils/utils/math/__init__.py, - docutils/utils/math/latex2mathml.py, - docutils/writers/xetex/__init__.py, - docutils/writers/latex2e/docutils-05-compat.sty, - docs/user/docutils-05-compat.sty.txt, - docutils/utils/error_reporting.py, - docutils/test/transforms/test_smartquotes.py: - - Copyright © Günter Milde. - Released under the terms of the `2-Clause BSD license`_ - (`local copy `__). - -* docutils/utils/smartquotes.py - - Copyright © 2011 Günter Milde, - based on `SmartyPants`_ © 2003 John Gruber - (released under a 3-Clause BSD license included in the file) - and smartypants.py © 2004, 2007 Chad Miller. - Released under the terms of the `2-Clause BSD license`_ - (`local copy `__). - - .. _SmartyPants: http://daringfireball.net/projects/smartypants/ - -* docutils/utils/math/math2html.py, - docutils/writers/html4css1/math.css - - Copyright © Alex Fernández - These files are part of eLyXer_, released under the `GNU - General Public License`_ version 3 or later. The author relicensed - them for Docutils under the terms of the `2-Clause BSD license`_ - (`local copy `__). - - .. _eLyXer: http://www.nongnu.org/elyxer/ - -* docutils/utils/roman.py, copyright by Mark Pilgrim, released under the - `Python 2.1.1 license`_ (`local copy`__). - - __ licenses/python-2-1-1.txt - -* tools/editors/emacs/rst.el, copyright by Free Software Foundation, - Inc., released under the `GNU General Public License`_ version 3 or - later (`local copy`__). - - __ licenses/gpl-3-0.txt - -The `2-Clause BSD license`_ and the Python licenses are OSI-approved_ -and GPL-compatible_. - -Plaintext versions of all the linked-to licenses are provided in the -licenses_ directory. - -.. _sandbox: http://docutils.sourceforge.net/sandbox/README.html -.. _licenses: licenses/ -.. _Python 2.1.1 license: http://www.python.org/2.1.1/license.html -.. _GNU General Public License: http://www.gnu.org/copyleft/gpl.html -.. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause -.. _OSI-approved: http://opensource.org/licenses/ -.. _license-list: -.. _GPL-compatible: http://www.gnu.org/licenses/license-list.html diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/INSTALLER b/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/METADATA b/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/METADATA deleted file mode 100644 index bac2ed6..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/METADATA +++ /dev/null @@ -1,64 +0,0 @@ -Metadata-Version: 2.1 -Name: docutils -Version: 0.16 -Summary: Docutils -- Python Documentation Utilities -Home-page: http://docutils.sourceforge.net/ -Author: David Goodger -Author-email: goodger@python.org -Maintainer: docutils-develop list -Maintainer-email: docutils-develop@lists.sourceforge.net -License: public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt) -Platform: OS-independent -Classifier: Development Status :: 4 - Beta -Classifier: Environment :: Console -Classifier: Intended Audience :: End Users/Desktop -Classifier: Intended Audience :: Other Audience -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: System Administrators -Classifier: License :: Public Domain -Classifier: License :: OSI Approved :: Python Software Foundation License -Classifier: License :: OSI Approved :: BSD License -Classifier: License :: OSI Approved :: GNU General Public License (GPL) -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Topic :: Documentation -Classifier: Topic :: Software Development :: Documentation -Classifier: Topic :: Text Processing -Classifier: Natural Language :: English -Classifier: Natural Language :: Afrikaans -Classifier: Natural Language :: Catalan -Classifier: Natural Language :: Chinese (Simplified) -Classifier: Natural Language :: Chinese (Traditional) -Classifier: Natural Language :: Czech -Classifier: Natural Language :: Danish -Classifier: Natural Language :: Dutch -Classifier: Natural Language :: Esperanto -Classifier: Natural Language :: Finnish -Classifier: Natural Language :: French -Classifier: Natural Language :: Galician -Classifier: Natural Language :: German -Classifier: Natural Language :: Hebrew -Classifier: Natural Language :: Italian -Classifier: Natural Language :: Japanese -Classifier: Natural Language :: Korean -Classifier: Natural Language :: Latvian -Classifier: Natural Language :: Lithuanian -Classifier: Natural Language :: Persian -Classifier: Natural Language :: Polish -Classifier: Natural Language :: Portuguese (Brazilian) -Classifier: Natural Language :: Russian -Classifier: Natural Language :: Slovak -Classifier: Natural Language :: Spanish -Classifier: Natural Language :: Swedish -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* - -Docutils is a modular system for processing documentation -into useful formats, such as HTML, XML, and LaTeX. For -input Docutils supports reStructuredText, an easy-to-read, -what-you-see-is-what-you-get plaintext markup syntax. - diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/RECORD b/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/RECORD deleted file mode 100644 index 5b6e2f5..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/RECORD +++ /dev/null @@ -1,332 +0,0 @@ -../../../bin/__pycache__/rst2html.cpython-38.pyc,, -../../../bin/__pycache__/rst2html4.cpython-38.pyc,, -../../../bin/__pycache__/rst2html5.cpython-38.pyc,, -../../../bin/__pycache__/rst2latex.cpython-38.pyc,, -../../../bin/__pycache__/rst2man.cpython-38.pyc,, -../../../bin/__pycache__/rst2odt.cpython-38.pyc,, -../../../bin/__pycache__/rst2odt_prepstyles.cpython-38.pyc,, -../../../bin/__pycache__/rst2pseudoxml.cpython-38.pyc,, -../../../bin/__pycache__/rst2s5.cpython-38.pyc,, -../../../bin/__pycache__/rst2xetex.cpython-38.pyc,, -../../../bin/__pycache__/rst2xml.cpython-38.pyc,, -../../../bin/__pycache__/rstpep2html.cpython-38.pyc,, -../../../bin/rst2html.py,sha256=_ZSHNn9dmPKAx6L7qZ8XgfPAy3KZv5MNky6n_8V3xiI,584 -../../../bin/rst2html4.py,sha256=u5YWYGbe9xyegHW30S6gzVpAg8nTI9Xu_ZOeve5CbOo,704 -../../../bin/rst2html5.py,sha256=_r_cnR_zNKLHiLjSTXDkMBLZskLkxmrPt93InJbhkbA,1127 -../../../bin/rst2latex.py,sha256=nLGST5HE554VD4EbuhUn2_6kijGgDFcQgOMa4RrFngI,781 -../../../bin/rst2man.py,sha256=nPtkEv9P7LIoK8GJOeiA66yi1ApVM1gNOFdbOB0CIXM,589 -../../../bin/rst2odt.py,sha256=iH9HaLPbzEfJU599E2DvAW2n2py69TXfJDOIZEHRsyk,754 -../../../bin/rst2odt_prepstyles.py,sha256=B90_1J9aRI6eJlKTYYDiHGyFio8Dfmgli9vJmg9qXHs,1716 -../../../bin/rst2pseudoxml.py,sha256=9SwwDEOFNz3AqOSI4CEvhieDm_3TgTPN_3FDPz6b5ys,591 -../../../bin/rst2s5.py,sha256=zdT-5LNxruUZqMVe-Wjj1F-eXan9pLDBvxA1k38XRGw,627 -../../../bin/rst2xetex.py,sha256=SzPM2iz6wCAc8Ki3sEnhCq6318jTQziosToib4FIzEw,861 -../../../bin/rst2xml.py,sha256=MKbl4dkpIBjzh4GdITggzJpi-SMGoRaXdkbZs-yd05E,592 -../../../bin/rstpep2html.py,sha256=TlXeA4lyMxtICwwaEERXcrXTleXfwyQE5qbooZLtcSw,660 -docutils-0.16.dist-info/COPYING.txt,sha256=76DIWqmepbR4EkADGw0Cr1TXtVVMh60rK-qbpJD2Zj8,5538 -docutils-0.16.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -docutils-0.16.dist-info/METADATA,sha256=4IVnPgSLMJRQ5ZfIjKFlv0poher_Si1vM7QowzUC1dI,2749 -docutils-0.16.dist-info/RECORD,, -docutils-0.16.dist-info/WHEEL,sha256=h_aVn5OB2IERUjMbi2pucmR_zzWJtk303YXvhh60NJ8,110 -docutils-0.16.dist-info/top_level.txt,sha256=dPq3jQoxpMOEhrZ1tQh3_-9hqhdvOjUplSdSVDAc95A,9 -docutils/__init__.py,sha256=YIX4_xeGvPh3ZINoAqP1zx76lI2RCCEw39wbeigwYWU,7759 -docutils/__pycache__/__init__.cpython-38.pyc,, -docutils/__pycache__/core.cpython-38.pyc,, -docutils/__pycache__/examples.cpython-38.pyc,, -docutils/__pycache__/frontend.cpython-38.pyc,, -docutils/__pycache__/io.cpython-38.pyc,, -docutils/__pycache__/nodes.cpython-38.pyc,, -docutils/__pycache__/statemachine.cpython-38.pyc,, -docutils/core.py,sha256=PTD5CeE4Z42n5f9UJJUxXGBK27fRGQ5kanx5aMlZ5qA,29575 -docutils/examples.py,sha256=nlPe2PYXNvz5ZAVRu7xHHiV7qML7s-eyUu4Gun7j3SY,3959 -docutils/frontend.py,sha256=dxG9PqW_-snfcbR5S2vunCsUUwH1OTauqx0RJxnMPdQ,37086 -docutils/io.py,sha256=th8Zq_UUIWY27bDIB1sLMtYhdzBWE4qo4Gf9VEwL_gk,16765 -docutils/languages/__init__.py,sha256=oPqoleNr7_rp64XNjbg4gdL8owO_gLEZc1HWHKOA26k,1555 -docutils/languages/__pycache__/__init__.cpython-38.pyc,, -docutils/languages/__pycache__/af.cpython-38.pyc,, -docutils/languages/__pycache__/ca.cpython-38.pyc,, -docutils/languages/__pycache__/cs.cpython-38.pyc,, -docutils/languages/__pycache__/da.cpython-38.pyc,, -docutils/languages/__pycache__/de.cpython-38.pyc,, -docutils/languages/__pycache__/en.cpython-38.pyc,, -docutils/languages/__pycache__/eo.cpython-38.pyc,, -docutils/languages/__pycache__/es.cpython-38.pyc,, -docutils/languages/__pycache__/fa.cpython-38.pyc,, -docutils/languages/__pycache__/fi.cpython-38.pyc,, -docutils/languages/__pycache__/fr.cpython-38.pyc,, -docutils/languages/__pycache__/gl.cpython-38.pyc,, -docutils/languages/__pycache__/he.cpython-38.pyc,, -docutils/languages/__pycache__/it.cpython-38.pyc,, -docutils/languages/__pycache__/ja.cpython-38.pyc,, -docutils/languages/__pycache__/ko.cpython-38.pyc,, -docutils/languages/__pycache__/lt.cpython-38.pyc,, -docutils/languages/__pycache__/lv.cpython-38.pyc,, -docutils/languages/__pycache__/nl.cpython-38.pyc,, -docutils/languages/__pycache__/pl.cpython-38.pyc,, -docutils/languages/__pycache__/pt_br.cpython-38.pyc,, -docutils/languages/__pycache__/ru.cpython-38.pyc,, -docutils/languages/__pycache__/sk.cpython-38.pyc,, -docutils/languages/__pycache__/sv.cpython-38.pyc,, -docutils/languages/__pycache__/zh_cn.cpython-38.pyc,, -docutils/languages/__pycache__/zh_tw.cpython-38.pyc,, -docutils/languages/af.py,sha256=6wl-XbsF8wbSiBs5IORna4Lz-WPqnnye_6qr8Cbh_1c,1824 -docutils/languages/ca.py,sha256=7_XR5q5GEXaeI4O5ianMmdnjWY_sRQD1ynuRB_HxUok,1940 -docutils/languages/cs.py,sha256=GARzldc3tDZByhqf_R-cOh1QJDOrFvSJzqewRdWRNXw,1928 -docutils/languages/da.py,sha256=88ZPB6ppJPWqNsaFQKKAC1aEZVLYw13BFR44vecp4MU,1907 -docutils/languages/de.py,sha256=AQTUIl4j3x43kQi5800-lobZHsh06VOsrxfAjS5FHGM,1722 -docutils/languages/en.py,sha256=tWVrPr6593mIzFokX_4Hw1fC6ZWC8GPdgpc72jmQq1g,1848 -docutils/languages/eo.py,sha256=uGSGcjfeHFliqm-f9amMfsPIl3trHONYPXdGR_ybm8U,1948 -docutils/languages/es.py,sha256=nk0PUeVyjFEu_8cNJA9Llsdv-W3kKx-wgOeaYGllqgw,1962 -docutils/languages/fa.py,sha256=vsf5xJxJuzcPXyz8ad3Cuf9ntBoOND0zdhsE4dwJEjI,2044 -docutils/languages/fi.py,sha256=yrE6Zhs-LdknXCpf-WX15QACQ75DroMpET95r3JD_OM,2026 -docutils/languages/fr.py,sha256=FTaOYQQHvqFzkzuhbdFQPS7dPkcpGLUPMeStu0cjFGs,1893 -docutils/languages/gl.py,sha256=6Uoq9rYigieFN0-LeSgoRmB9_ROX60Oqul7faPROMYs,2040 -docutils/languages/he.py,sha256=BfiRLxQ5Y8pivYi7GbGQ5NJ-rEgUId9mstJR6YYkeAQ,2683 -docutils/languages/it.py,sha256=Z3eh86YrmB8aT_Dl56X7W2gqpJgYK0v0QnJ07hekXlM,1808 -docutils/languages/ja.py,sha256=VJc9fRk4H_OhD8wyx3-uGUay3qdqeAIHCZEF67EsMTQ,1942 -docutils/languages/ko.py,sha256=PsZlCPQ5uQsUC2Puk2POTDmTc83cJWOxHmLrnq3-s2U,1880 -docutils/languages/lt.py,sha256=Y1204UnrqJlvM1vyteckkrqkbU02dSvrnpHCB5b23oM,1940 -docutils/languages/lv.py,sha256=tEqF4ya9h4FznB-uiUKQnNLY2XDFRatxKt2evJPhsDM,1867 -docutils/languages/nl.py,sha256=3CjsGFeJgLZEw2xhHxAc4sYDKRW6ODUZsVyibjl7DmM,1865 -docutils/languages/pl.py,sha256=ImdSmS6l4SgZ7uEaWQR5_aLNmv4K5onOInEtinPqWJk,1900 -docutils/languages/pt_br.py,sha256=cW8OceiFMPzPICT6buhnjm3tvEEw4W1PG-GFC4MxhyI,1982 -docutils/languages/ru.py,sha256=AkDQVhcW4cbvP0je-z8UJafQ-s2Lwc-eAIqXGCFZzco,2155 -docutils/languages/sk.py,sha256=v4XMBxIx5d6zQY7ehjZdtgfUy9Hz999XdH9G9d7SxEc,1860 -docutils/languages/sv.py,sha256=yIVWV9He5dbCuMpegSDiuI75tD4GXm9VkN7ra0-xgMI,2103 -docutils/languages/zh_cn.py,sha256=kF2sokHa0Qr-3X45ZeWEb0mImZRlZpiX2TM6d9_GjpY,2026 -docutils/languages/zh_tw.py,sha256=Xwrbf8wSylyMwwaNH6xYeAjMrldiBbDB_LElv67hGPQ,2771 -docutils/nodes.py,sha256=RRwVFRtRtRUzbuoYIWkMoSBXBAfQ4Dc2Xtzvht7XwAY,81241 -docutils/parsers/__init__.py,sha256=aDrATsCPGo92zucFl_n2ludoFSfxOrmdF7U8oQV0uEQ,1584 -docutils/parsers/__pycache__/__init__.cpython-38.pyc,, -docutils/parsers/__pycache__/null.cpython-38.pyc,, -docutils/parsers/null.py,sha256=LtO7n-E6lNOs4mLXZ2SiShB3C630SoJ80ugd9fh1vXI,445 -docutils/parsers/rst/__init__.py,sha256=F6PQ5IyGtYcpxOi0YHekivCrob2iLQIn5JpaqTIME50,16208 -docutils/parsers/rst/__pycache__/__init__.cpython-38.pyc,, -docutils/parsers/rst/__pycache__/roles.cpython-38.pyc,, -docutils/parsers/rst/__pycache__/states.cpython-38.pyc,, -docutils/parsers/rst/__pycache__/tableparser.cpython-38.pyc,, -docutils/parsers/rst/directives/__init__.py,sha256=dk9-IEfhp-xsEcuEkW1PthgJYdkva87rMlAVMh8eRYs,14053 -docutils/parsers/rst/directives/__pycache__/__init__.cpython-38.pyc,, -docutils/parsers/rst/directives/__pycache__/admonitions.cpython-38.pyc,, -docutils/parsers/rst/directives/__pycache__/body.cpython-38.pyc,, -docutils/parsers/rst/directives/__pycache__/html.cpython-38.pyc,, -docutils/parsers/rst/directives/__pycache__/images.cpython-38.pyc,, -docutils/parsers/rst/directives/__pycache__/misc.cpython-38.pyc,, -docutils/parsers/rst/directives/__pycache__/parts.cpython-38.pyc,, -docutils/parsers/rst/directives/__pycache__/references.cpython-38.pyc,, -docutils/parsers/rst/directives/__pycache__/tables.cpython-38.pyc,, -docutils/parsers/rst/directives/admonitions.py,sha256=w38T7YfRc0isuF5qmaw-6wOQgHx9xGHJBqu_gDqQCdI,2413 -docutils/parsers/rst/directives/body.py,sha256=qkeqiZrbSbfd8bMxfSl1M0HJ_vCfZYg63HhUmdldpE0,9191 -docutils/parsers/rst/directives/html.py,sha256=CKHg2_lAFayH2DGoVD_t9--nNKVMh7aNuWmNTef7ffI,3235 -docutils/parsers/rst/directives/images.py,sha256=PthLb5pJJvltqvTLkQSOemWEzO_ZEQbjlbKBilZ03x0,6982 -docutils/parsers/rst/directives/misc.py,sha256=MVqSu3TutboCbNFLIXgJ8EXF2R8Z8K_k2nDJ73JY1_w,23872 -docutils/parsers/rst/directives/parts.py,sha256=Mx7y6BwTP1WAD_qnL-g0bjg1_O06NCXgqeYCPfP4JbI,4251 -docutils/parsers/rst/directives/references.py,sha256=1Y1yhe_O2PqLtQUSly-ny291nrQKJgQiO4Hu7Xew9Zo,831 -docutils/parsers/rst/directives/tables.py,sha256=QjxFrNMHdH6rgyIiqBcbVqWvy8ousjy5k6ZeDKeZh8s,22815 -docutils/parsers/rst/include/README.txt,sha256=_C6pSfeGShQ0evvKKKZUtx4bP4RFG9UoUlgHoMn06DU,666 -docutils/parsers/rst/include/isoamsa.txt,sha256=CioOAjUSuL_MG2JHqVHst0ceHzF0v3kupB6stgPMD2g,10925 -docutils/parsers/rst/include/isoamsb.txt,sha256=pSD9D42IRcGBcjYXrJUBFicIA7KRtfBhCKnFlJiytC0,7242 -docutils/parsers/rst/include/isoamsc.txt,sha256=wC2J-pHkHJMokFfOg6S5_6TX1LcibltUpLMWkm-OT3U,1723 -docutils/parsers/rst/include/isoamsn.txt,sha256=LPorblUlj9fua5tpigH-lAfqPYj_yXWQiOa91CpBD7w,6721 -docutils/parsers/rst/include/isoamso.txt,sha256=3CB6lhSNhRIAY-ST8hGPRrO-6wxI2jhYnWTU1_uBXyY,3825 -docutils/parsers/rst/include/isoamsr.txt,sha256=3qVvk1ueHuE6jnHp8ypn6UWtZH5Ly2njNDj09Xeh2qU,11763 -docutils/parsers/rst/include/isobox.txt,sha256=tYnVIj92mJ5jiY8H9-S3CzBprjU8scuJZ8BO_eWEdwc,3101 -docutils/parsers/rst/include/isocyr1.txt,sha256=-V1dpOyKxXBzNBxcW7IJp1W-SIkaXd0KVm8TP58a5B8,4241 -docutils/parsers/rst/include/isocyr2.txt,sha256=3pDslLms3yuJgQTcWtu8U1FMrMQ4KgxtDT18Ci6Mvz4,1882 -docutils/parsers/rst/include/isodia.txt,sha256=-qThXeZ-WFGztOuu_koRrlvDJpSkMVB4ivU9yyE2y7Y,869 -docutils/parsers/rst/include/isogrk1.txt,sha256=xnCDDphWarsNmum9SQRvntznPx7m547rRRuQs7PdYpQ,3010 -docutils/parsers/rst/include/isogrk2.txt,sha256=zbi3-LuRB6T0jGj_yffmgm_8_mwz-6ygAYvgie32ls0,1705 -docutils/parsers/rst/include/isogrk3.txt,sha256=X8fGxnVIG1ygvvc9hpYgUHt1d8ANdD-gxn6aKWEaRf0,2880 -docutils/parsers/rst/include/isogrk4-wide.txt,sha256=rpweSoCmHEC1vL44LEeIE8Re2tm5FEAWnae6CO2oe1I,3035 -docutils/parsers/rst/include/isogrk4.txt,sha256=zptf_ntrFuMsuk0OhEjUkRwYrz0YGDuD-_6ReIHOunY,372 -docutils/parsers/rst/include/isolat1.txt,sha256=F5R0rnBefjAbqWFCkWMFpxVKWoSec8VM0KU8DRtMCYI,4397 -docutils/parsers/rst/include/isolat2.txt,sha256=YBBbW3o9HD1JHV3QVfpaFeKnRsh2vPs0dNvpTJSEoSU,8466 -docutils/parsers/rst/include/isomfrk-wide.txt,sha256=EtzR0nFzhkCmf8CKR4hLWSAgbUjHs4sYfpJEyDp8CjY,3334 -docutils/parsers/rst/include/isomfrk.txt,sha256=zZy3M5BmklzpL02dImsAuWA1jVw7nxqx3xyZLKtILfA,519 -docutils/parsers/rst/include/isomopf-wide.txt,sha256=QUhEHzhyuCM3qzrqG5luXuL28Uoqt7I7v-CfzToG8sI,1931 -docutils/parsers/rst/include/isomopf.txt,sha256=MGuLb8WfrDm7GWvdmvYHsWtrWyh6MqRRo7wnpiaia0U,639 -docutils/parsers/rst/include/isomscr-wide.txt,sha256=VHq8miDC5nKS6Rlvv9aWpS1D_naXcfZd1CsEpJ2W8-g,3231 -docutils/parsers/rst/include/isomscr.txt,sha256=WvB9Zek3TqSyIDfw5QmE_uTvXNwjBpYU0EQttckdLJo,776 -docutils/parsers/rst/include/isonum.txt,sha256=DHWd87O6CCaSz10PEGZOxLqpDLHiMZ6--0VR9o0Yt-Q,4066 -docutils/parsers/rst/include/isopub.txt,sha256=oULMcx0Ugjk6EZAMcxHZpZM_MC7kNuzecu-sMAHVZro,4613 -docutils/parsers/rst/include/isotech.txt,sha256=h6z4dEMoVtarA9E489Zru1H29c01hWWGqbfD3wgUmiM,9726 -docutils/parsers/rst/include/mmlalias.txt,sha256=YxSvNJVNsrzgIGNjtAjtx2tVXUuby5twMZxr5Mq3PJo,45428 -docutils/parsers/rst/include/mmlextra-wide.txt,sha256=KKNjVkG-xHbeCagQfQDotJxY5oF6S6Bmk60bEv49NUQ,9010 -docutils/parsers/rst/include/mmlextra.txt,sha256=Y50tQh0fLYClCc0DUVrxr2loU5u5YaUaYbFc9PEya_c,6800 -docutils/parsers/rst/include/s5defs.txt,sha256=_5JOMpDtaufiZbdxh6QKpICqLvGpB9cypHM-SEt3sKA,1036 -docutils/parsers/rst/include/xhtml1-lat1.txt,sha256=-cEYtq3oOOoLQS6n2KmsAcIs3Y5s78mToBkUXuSrSKA,6112 -docutils/parsers/rst/include/xhtml1-special.txt,sha256=dVNILahp_Jkf0bQVX-gGFcQXst3oR-FvQmAt6lDSTpE,1945 -docutils/parsers/rst/include/xhtml1-symbol.txt,sha256=K-f7hr-LRv1NKOxjZtckBmtMQOiddlnJJ-6DG-YoAzI,7028 -docutils/parsers/rst/languages/__init__.py,sha256=sOTYRqWClRSCBOO1I46Z8-WYDJPgWtqwwqt9iIKXpls,1014 -docutils/parsers/rst/languages/__pycache__/__init__.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/af.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/ca.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/cs.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/da.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/de.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/en.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/eo.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/es.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/fa.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/fi.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/fr.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/gl.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/he.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/it.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/ja.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/ko.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/lt.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/lv.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/nl.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/pl.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/pt_br.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/ru.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/sk.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/sv.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/zh_cn.cpython-38.pyc,, -docutils/parsers/rst/languages/__pycache__/zh_tw.cpython-38.pyc,, -docutils/parsers/rst/languages/af.py,sha256=CKdMjiS3nx4yNRrzeuwCoT0XeeQmHm2_O8U34BZns7s,3677 -docutils/parsers/rst/languages/ca.py,sha256=7eAACvO9Dpnqujsc3BJZQktHk1RDjmwf4LeEvkV_66o,4467 -docutils/parsers/rst/languages/cs.py,sha256=7g4NgLXvV5RP7oOqQT_TM033xW48mDQVoGGHhKSwZ8I,4857 -docutils/parsers/rst/languages/da.py,sha256=u9zvTSVuqJBQ-KKlcZmi4SMAp_kQXNS6ZsHBEiVmXjY,3765 -docutils/parsers/rst/languages/de.py,sha256=wiBjwHBDmiDIRs9gTtpI63VTyp7zqds5DWy9Kdw9Ntg,3464 -docutils/parsers/rst/languages/en.py,sha256=z_J8xJ1gBTk5MX6u_bonFGoop_e8VF6jWgq9Tzl5gNY,3317 -docutils/parsers/rst/languages/eo.py,sha256=q0025TiEuSZ_8VGZz2n86ZK4o6GVTdus1HBgdxAgz0A,3898 -docutils/parsers/rst/languages/es.py,sha256=vranS55noGU_pSC0f7uyJ12szSoxMKgRJuEK-DQfhpk,4261 -docutils/parsers/rst/languages/fa.py,sha256=XWeO9UdNGKbHWpcsAhEOgBvuLMGxjQ76I5ed7i2szPw,3430 -docutils/parsers/rst/languages/fi.py,sha256=CiWQxGOSnLA05yONUB0tqsnv4IPCbvfPYU7obKRo-kU,3661 -docutils/parsers/rst/languages/fr.py,sha256=42D2mXBLYl1Vc7KnVGi-CFQbhe_DTEIpT26_f3gWknI,3709 -docutils/parsers/rst/languages/gl.py,sha256=48NwM1CfNZOfmSYkqfhUsAww2292kZLPlt_Ty5sGzxE,3711 -docutils/parsers/rst/languages/he.py,sha256=go2_5QONLkGd4KS7ZIBur2vP04GUlN95XnOTizfwZOc,3640 -docutils/parsers/rst/languages/it.py,sha256=ihEL_NivtrckGnU6dT_kTmOrafmPUIC7-e6KMUJ_y2Q,3270 -docutils/parsers/rst/languages/ja.py,sha256=jaRnNN5sTXciz9O9_-kl7rlrScCJC12S3msQWPg5yH0,3863 -docutils/parsers/rst/languages/ko.py,sha256=4cZFij5pbqx_RgKvwg_10TMMARQ9LR_edvLqlLmZbwE,3449 -docutils/parsers/rst/languages/lt.py,sha256=RWSEyHddq14wvtuIbDxRT-JnPuRh8Gk33hOHh5BEXFI,3584 -docutils/parsers/rst/languages/lv.py,sha256=OfnTo1Si1V1E_7yNAwkyQMe6y07FsOA_F-1H2Fb6vIU,3381 -docutils/parsers/rst/languages/nl.py,sha256=2yKY36FtTEkRl-YjBOm9KtLTQR8nTIGT5ORt1qhcWQk,3708 -docutils/parsers/rst/languages/pl.py,sha256=RsEunaFFi6fiko9CZrVTyWTS7MbEuJLd0eAC5EOWWWo,3427 -docutils/parsers/rst/languages/pt_br.py,sha256=wDfQWhP_ZikrL3o9T4SjyfhRmCg8Y9uIS6FnUrTASkw,3992 -docutils/parsers/rst/languages/ru.py,sha256=abw64X77S-WFpIhbbn2v_YzzjphGyjqbMhaQjnLL1N0,3306 -docutils/parsers/rst/languages/sk.py,sha256=dhy_kVHdIVSFW9aBnNBU3YTXstouhmeOMHzZsBQ7vfU,3979 -docutils/parsers/rst/languages/sv.py,sha256=S8vtO81rSQTvAV4rzrzP7XQ1Hg894gtjjlqJ8FcPRf8,3331 -docutils/parsers/rst/languages/zh_cn.py,sha256=6FyYegjPnIFguqQhR9cBu5xxlrkRszNQHWGXEByF05M,4007 -docutils/parsers/rst/languages/zh_tw.py,sha256=PswlAgKcAMvgQB2jbp1hDCpzG63ZfxgBwlJviK8KRHM,5172 -docutils/parsers/rst/roles.py,sha256=o7thTCx0_1-pMkdYseZt5UaYf6RK646ZzhkuRFAePhQ,14944 -docutils/parsers/rst/states.py,sha256=S80k_XG5kA9PNwQh9dlI-JLVDpuRMwObIvPhNxMaQ04,132111 -docutils/parsers/rst/tableparser.py,sha256=Zbvt0mR6LJYeiMR495xe0dgqlK43HK9JjIw20PvcqdM,21001 -docutils/readers/__init__.py,sha256=5alRbkyRVbNkq8njp1egI_OnGyXkxQBwMGa9MbxAoD4,3456 -docutils/readers/__pycache__/__init__.cpython-38.pyc,, -docutils/readers/__pycache__/doctree.cpython-38.pyc,, -docutils/readers/__pycache__/pep.cpython-38.pyc,, -docutils/readers/__pycache__/standalone.cpython-38.pyc,, -docutils/readers/doctree.py,sha256=9QNTk_8x46sDkcSjzQiyFZxN-m9CBO3XA5bLar7OA0Q,1607 -docutils/readers/pep.py,sha256=V9b6SUQ_h74KK11wq5k2icEPGWQuVDG5gCzhWlJdF3Y,1555 -docutils/readers/standalone.py,sha256=6kRgqKD_REEZ_zZE5AW0rLj_rqOhisubS2ADyLjOAJQ,2340 -docutils/statemachine.py,sha256=zneRqVNxZaSKK7RGag5QrlbCSAkuphG4qlZXu7CeEXw,57663 -docutils/transforms/__init__.py,sha256=KZ2cNaA87oQNs6Yi_UK2A3V3mUZz4AbZlzaCD-2fFnY,6504 -docutils/transforms/__pycache__/__init__.cpython-38.pyc,, -docutils/transforms/__pycache__/components.cpython-38.pyc,, -docutils/transforms/__pycache__/frontmatter.cpython-38.pyc,, -docutils/transforms/__pycache__/misc.cpython-38.pyc,, -docutils/transforms/__pycache__/parts.cpython-38.pyc,, -docutils/transforms/__pycache__/peps.cpython-38.pyc,, -docutils/transforms/__pycache__/references.cpython-38.pyc,, -docutils/transforms/__pycache__/universal.cpython-38.pyc,, -docutils/transforms/__pycache__/writer_aux.cpython-38.pyc,, -docutils/transforms/components.py,sha256=F0fXyOZsf_OA0QsX-jIAsk3RLCrkEW9GRR1-l0Nx13o,1993 -docutils/transforms/frontmatter.py,sha256=ooKzVho4qdgnkDqbjLql6AauIbJ8vHglQPnv3W4BEFU,20167 -docutils/transforms/misc.py,sha256=0jDAIndz8a7C5TVWLkC44N1pVfhwZu4nu-lnk1GmzGg,4882 -docutils/transforms/parts.py,sha256=jxs_CsaBH7uyvtCrxZqHQynLj4ktKax-_4d2xVDNNFs,6997 -docutils/transforms/peps.py,sha256=NdXwjk5gvzuzWDXred5OEbpPIDn2bWxECrBkYC_gF10,11056 -docutils/transforms/references.py,sha256=3094yQhcQa84BzcX1zjKTK7UGMjhOYejvwcv_8k7WZw,36478 -docutils/transforms/universal.py,sha256=tRcngG0usTWzQESOKqJeO4VCi3KlHzoUxHBw5ZJ_ljM,11380 -docutils/transforms/writer_aux.py,sha256=4Zd8z8s4jTG2J0xSnm5hj1kiZrKN6FqvGvpJ1cb09oU,2609 -docutils/utils/__init__.py,sha256=5VaDEvT45RFBaJvB_g5zbMilxQopc3hOMUa0SI0CRoY,28767 -docutils/utils/__pycache__/__init__.cpython-38.pyc,, -docutils/utils/__pycache__/code_analyzer.cpython-38.pyc,, -docutils/utils/__pycache__/error_reporting.cpython-38.pyc,, -docutils/utils/__pycache__/punctuation_chars.cpython-38.pyc,, -docutils/utils/__pycache__/roman.cpython-38.pyc,, -docutils/utils/__pycache__/smartquotes.cpython-38.pyc,, -docutils/utils/__pycache__/urischemes.cpython-38.pyc,, -docutils/utils/code_analyzer.py,sha256=wdT6BK7wcyYs13lu24KamEmXqRYi0fZgQBJCwE39ff0,5166 -docutils/utils/error_reporting.py,sha256=R0ViAzmz8GWr3Eayu51l6m9kCivbaJLCIf4NOiSPvqk,8460 -docutils/utils/math/__init__.py,sha256=TUGMP6ytwBzbQCHrFSxSl8OcDdbLGfCCkGteBdWm6l0,1755 -docutils/utils/math/__pycache__/__init__.cpython-38.pyc,, -docutils/utils/math/__pycache__/latex2mathml.cpython-38.pyc,, -docutils/utils/math/__pycache__/math2html.cpython-38.pyc,, -docutils/utils/math/__pycache__/tex2mathml_extern.cpython-38.pyc,, -docutils/utils/math/__pycache__/tex2unichar.cpython-38.pyc,, -docutils/utils/math/__pycache__/unichar2tex.cpython-38.pyc,, -docutils/utils/math/latex2mathml.py,sha256=JO-79izteHloIWN33QIhg3v-8cbI_kWGwvfQ32tbarc,17456 -docutils/utils/math/math2html.py,sha256=ibVwl7RbG2F--iwVVDhGoEqxnKj552Y-HYm7TybzREQ,184696 -docutils/utils/math/tex2mathml_extern.py,sha256=Zx-47MMnzGnbP9YLu_Yc6KM7dcuSgzJPfKZy_i0gj5I,5656 -docutils/utils/math/tex2unichar.py,sha256=0tXV29tatGECc6zDV78yvx-6vc5npfO1GukZrzbI5ps,35109 -docutils/utils/math/unichar2tex.py,sha256=pQsCi50-vC7hbl0DsfHEK5Xn9jhHOAOtG6D0tTWGAAY,17590 -docutils/utils/punctuation_chars.py,sha256=UPAtrr1Om1cJ0l3JpNLvnuNryfR8ybXNvOJNriO7PW0,6426 -docutils/utils/roman.py,sha256=nJRHm0rTPqrKFrwJNwOM8ywKIy81DKvAlXPdnOsefIU,2688 -docutils/utils/smartquotes.py,sha256=DuVPLCPUnn1Q_TPn0PzNLRTonSPPNOTgWbo1cc1kQY4,40050 -docutils/utils/urischemes.py,sha256=_wNIoSw8D_Ch4dLGMZmCTceF4mT6jnodFK_H2HDSRLA,6272 -docutils/writers/__init__.py,sha256=ybRAHTZrV29u5zCFTbAcQvh6ZZDRgQqliRn4cPMiVzw,4593 -docutils/writers/__pycache__/__init__.cpython-38.pyc,, -docutils/writers/__pycache__/_html_base.cpython-38.pyc,, -docutils/writers/__pycache__/docutils_xml.cpython-38.pyc,, -docutils/writers/__pycache__/manpage.cpython-38.pyc,, -docutils/writers/__pycache__/null.cpython-38.pyc,, -docutils/writers/__pycache__/pseudoxml.cpython-38.pyc,, -docutils/writers/_html_base.py,sha256=h30bM3-CdDeK-lF1DM3-M1b_-4n7rAjl1N0VP_CRXpE,63552 -docutils/writers/docutils_xml.py,sha256=P8A8o8YnEZQXmHQrXF-D3vXCm29RZE185Fvd_sJWIXg,7134 -docutils/writers/html4css1/__init__.py,sha256=fFw4DkEEIZmPM8B90Gw15raeupFCQZ2dw61gMS4LV9k,33839 -docutils/writers/html4css1/__pycache__/__init__.cpython-38.pyc,, -docutils/writers/html4css1/html4css1.css,sha256=BvqQaXs-bQ6Vx7TVsdXxxLwoiQeXQ-Wn1z7ZXRXk_q8,7210 -docutils/writers/html4css1/template.txt,sha256=HDzUUyAv7gT4ewGQTqfOE2_9HOVyGu9-wCRgsmoCmjQ,114 -docutils/writers/html5_polyglot/__init__.py,sha256=c_rbVRHUFlPFl6tBKv95WoC1DPeDbqL-2vazhCCVJ3k,9612 -docutils/writers/html5_polyglot/__pycache__/__init__.cpython-38.pyc,, -docutils/writers/html5_polyglot/math.css,sha256=hGjowMetSh3oAlkm7_EA2pTtkv_Lg_TgwrBkyNs85Co,4783 -docutils/writers/html5_polyglot/minimal.css,sha256=pdv3dDbMH9X4VQS0aQO3Ufqg1h-waHnNJ0lFeBsy2Bs,7468 -docutils/writers/html5_polyglot/plain.css,sha256=pHd4urXyhNsneZq1MHvnScLIsRhEdyoU9X52L7fF3gM,6939 -docutils/writers/html5_polyglot/template.txt,sha256=HDzUUyAv7gT4ewGQTqfOE2_9HOVyGu9-wCRgsmoCmjQ,114 -docutils/writers/latex2e/__init__.py,sha256=aBoY6-pndI5_6o1Afw-RF2jHIxhKe36ECDEbO4WY3RA,130375 -docutils/writers/latex2e/__pycache__/__init__.cpython-38.pyc,, -docutils/writers/latex2e/default.tex,sha256=KQFojDUG6AFGSZFGWVsQCslQrWT5-JVB29idVWiRtUA,422 -docutils/writers/latex2e/titlepage.tex,sha256=wxPKr4rylqUamK2U0EJXQTaVQ1392ua5DtSVGDqrNsI,534 -docutils/writers/latex2e/xelatex.tex,sha256=oUEz2Ze3wpoMp0X0iVELcUGNtKVre5Ug5Ujge7OiMgU,672 -docutils/writers/manpage.py,sha256=FEM_KtyyY8PgAScTa5R7dXLKlGCJPLbsaapNoI1SORg,36148 -docutils/writers/null.py,sha256=zyIuah_o8SlqvgbOWLRG9chpeNKky0D13lOTtR1E73U,450 -docutils/writers/odf_odt/__init__.py,sha256=8mr-TC7zljTp_mUUL-tZNhCCS5lezfojN1yadSDRqjQ,133436 -docutils/writers/odf_odt/__pycache__/__init__.cpython-38.pyc,, -docutils/writers/odf_odt/__pycache__/pygmentsformatter.cpython-38.pyc,, -docutils/writers/odf_odt/pygmentsformatter.py,sha256=iBsRNxRe-v378-whp_F8CwgvuK7Ck4o_Tx4Kae8NlYw,4671 -docutils/writers/odf_odt/styles.odt,sha256=xKv9z2sd1qNxAH28X-5st5JuDZeTw6jyDOxXohsFrKY,16500 -docutils/writers/pep_html/__init__.py,sha256=gOJnTxuKLtM-81wdjIFbH5GyTFLV9m1_ZOu7Lys_MZc,3558 -docutils/writers/pep_html/__pycache__/__init__.cpython-38.pyc,, -docutils/writers/pep_html/pep.css,sha256=UbFfiHHFSWusk2rEv7AUaTCS0r6TxfMzgLtW0VURwGw,6367 -docutils/writers/pep_html/template.txt,sha256=CfyVCCoqqB3Y8hOyt7Uxf0XeyTwtFf926L_hJeaS1wU,1294 -docutils/writers/pseudoxml.py,sha256=2bRL9zMleW8jDuGaINvM52siZiJWH1-zQfEELJE2oPE,772 -docutils/writers/s5_html/__init__.py,sha256=MUczVy19slU_C6s1akdizatEvt5KPi72Bmj2f46r-IU,14688 -docutils/writers/s5_html/__pycache__/__init__.cpython-38.pyc,, -docutils/writers/s5_html/themes/README.txt,sha256=wsty9ouRFxVMrZV2EUTOmfMS_bJJpmA5CqU23fpMccM,301 -docutils/writers/s5_html/themes/big-black/__base__,sha256=WeKnChXCPkrXDs7Xr-Qnf1i-bgFjkeaKJ-ilXV0R5lM,38 -docutils/writers/s5_html/themes/big-black/framing.css,sha256=RctE4TbWO_ctWsmE1LSPdCVRMT1QFlTrNmQNKC4wC2Y,911 -docutils/writers/s5_html/themes/big-black/pretty.css,sha256=VFK99wlPllRBKK0eQ2Yk6RC_-VDMREm-ue2Mp3YMs7A,3606 -docutils/writers/s5_html/themes/big-white/framing.css,sha256=6M4vVFfoErc5LKtuol1RqnId0166VecGy6rYu9cPY9c,906 -docutils/writers/s5_html/themes/big-white/pretty.css,sha256=YO7dDIRq7dXpIdC8pEOf7QaBb9nUvajfWkkQpxt3nJs,3566 -docutils/writers/s5_html/themes/default/blank.gif,sha256=L1YbAqSTduNnms1ZdeN5Cr3_Cey636HhhYx7om4__O8,49 -docutils/writers/s5_html/themes/default/framing.css,sha256=fcGapNDqnTT2w-2HpWTHb5yf9Yq-_31DJuazk7lCSQw,1003 -docutils/writers/s5_html/themes/default/iepngfix.htc,sha256=ve7IwOG4pkjDmYItcuQrUbESmVaY6ACDhhA5YP9d73c,1190 -docutils/writers/s5_html/themes/default/opera.css,sha256=guPZOg_BINv-LjV9_IAM7ILFQ-fKALNjlP1i06e5dmA,261 -docutils/writers/s5_html/themes/default/outline.css,sha256=z3ACJiW3_gnG8XFvX602PMTYvKhbRybqCeoWl3O_pA0,648 -docutils/writers/s5_html/themes/default/pretty.css,sha256=dUbMlVTFGx3ofvXGUmhnKAADhBkHsdU0ysWpxwX-70M,4384 -docutils/writers/s5_html/themes/default/print.css,sha256=INhYRMsY7y2wd9p7tqjcDWBREXHUMO-2ApAWvITyetI,818 -docutils/writers/s5_html/themes/default/s5-core.css,sha256=MrHjKxQ7P7ZFC2FmEq2BnkRWs59YVzUS_ZOw8CHC2Jk,451 -docutils/writers/s5_html/themes/default/slides.css,sha256=VKYQ1Oe8lZ8LHxzPqJiU79J0z295nkmIbzsXL-N_dfQ,283 -docutils/writers/s5_html/themes/default/slides.js,sha256=n6_977F6UKSfpYSDu5RKhS1g7iehHcmxm1jDLD17ME4,15800 -docutils/writers/s5_html/themes/medium-black/__base__,sha256=822LJG-LrdBZY6CA7wsLFCFzsYfxbyz2mr1j6rpb1UA,41 -docutils/writers/s5_html/themes/medium-black/pretty.css,sha256=zoRP67Cmy7JzwnXqKe02GwGzt0p5z509ymlbaxXuPoI,4031 -docutils/writers/s5_html/themes/medium-white/framing.css,sha256=nstQg2Fwdm6TTRHflpYRE7Q3b2jFO5p6tyDXJhsmi0I,944 -docutils/writers/s5_html/themes/medium-white/pretty.css,sha256=SafUPS2T_uel8lPQlvouTXUrgT9QY52nxnBJDt_pmP4,3991 -docutils/writers/s5_html/themes/small-black/__base__,sha256=WmiB80z49RfMsy_7tFI042AfUgyztL5OXI3tap9EfQM,40 -docutils/writers/s5_html/themes/small-black/pretty.css,sha256=G_e83H9lIDHXtUBJRCnsnxSiAhP0zaAafQwSviioUQ8,4030 -docutils/writers/s5_html/themes/small-white/framing.css,sha256=klf55tsjjL7FuzlWi0yY_4bHJWZZhlD36VCevg45o70,941 -docutils/writers/s5_html/themes/small-white/pretty.css,sha256=yaLNE-loYn_nSCuzvGVJWHAbh90dxdO5I06Cv-d4wcM,4001 -docutils/writers/xetex/__init__.py,sha256=ROox1G2bCAOJoht_UttnqAVgFckavEXjlkpBpQj8LFc,5797 -docutils/writers/xetex/__pycache__/__init__.cpython-38.pyc,, diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/WHEEL b/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/WHEEL deleted file mode 100644 index 78e6f69..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.33.4) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/top_level.txt b/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/top_level.txt deleted file mode 100644 index 5492d76..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils-0.16.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -docutils diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/__init__.py deleted file mode 100644 index 5bb6504..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/__init__.py +++ /dev/null @@ -1,233 +0,0 @@ -# $Id: __init__.py 8453 2020-01-12 13:28:32Z grubert $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -This is the Docutils (Python Documentation Utilities) package. - -Package Structure -================= - -Modules: - -- __init__.py: Contains component base classes, exception classes, and - Docutils version information. - -- core.py: Contains the ``Publisher`` class and ``publish_*()`` convenience - functions. - -- frontend.py: Runtime settings (command-line interface, configuration files) - processing, for Docutils front-ends. - -- io.py: Provides a uniform API for low-level input and output. - -- nodes.py: Docutils document tree (doctree) node class library. - -- statemachine.py: A finite state machine specialized for - regular-expression-based text filters. - -Subpackages: - -- languages: Language-specific mappings of terms. - -- parsers: Syntax-specific input parser modules or packages. - -- readers: Context-specific input handlers which understand the data - source and manage a parser. - -- transforms: Modules used by readers and writers to modify DPS - doctrees. - -- utils: Contains the ``Reporter`` system warning class and miscellaneous - utilities used by readers, writers, and transforms. - - utils/urischemes.py: Contains a complete mapping of known URI addressing - scheme names to descriptions. - -- utils/math: Contains functions for conversion of mathematical notation - between different formats (LaTeX, MathML, text, ...). - -- writers: Format-specific output translators. -""" - -import sys -from collections import namedtuple - - -__docformat__ = 'reStructuredText' - -__version__ = '0.16' -"""Docutils version identifier (complies with PEP 440):: - - major.minor[.micro][releaselevel[serial]][.dev] - -For version comparison operations, use `__version_info__` (see, below) -rather than parsing the text of `__version__`. - -See 'Version Numbering' in docs/dev/policies.txt. -""" - -VersionInfo = namedtuple( - 'VersionInfo', 'major minor micro releaselevel serial release') - -__version_info__ = VersionInfo( - major=0, - minor=16, - micro=0, - releaselevel='final', # one of 'alpha', 'beta', 'candidate', 'final' - # pre-release serial number (0 for final releases and active development): - serial=0, - release=True # True for official releases and pre-releases - ) -"""Comprehensive version information tuple. See 'Version Numbering' in -docs/dev/policies.txt.""" - -__version_details__ = 'release' -"""Optional extra version details (e.g. 'snapshot 2005-05-29, r3410'). -(For development and release status see `__version_info__`.) -""" - - -class ApplicationError(Exception): pass - -class DataError(ApplicationError): pass - - -class SettingsSpec(object): - - """ - Runtime setting specification base class. - - SettingsSpec subclass objects used by `docutils.frontend.OptionParser`. - """ - - settings_spec = () - """Runtime settings specification. Override in subclasses. - - Defines runtime settings and associated command-line options, as used by - `docutils.frontend.OptionParser`. This is a tuple of: - - - Option group title (string or `None` which implies no group, just a list - of single options). - - - Description (string or `None`). - - - A sequence of option tuples. Each consists of: - - - Help text (string) - - - List of option strings (e.g. ``['-Q', '--quux']``). - - - Dictionary of keyword arguments sent to the OptionParser/OptionGroup - ``add_option`` method. - - Runtime setting names are derived implicitly from long option names - ('--a-setting' becomes ``settings.a_setting``) or explicitly from the - 'dest' keyword argument. - - Most settings will also have a 'validator' keyword & function. The - validator function validates setting values (from configuration files - and command-line option arguments) and converts them to appropriate - types. For example, the ``docutils.frontend.validate_boolean`` - function, **required by all boolean settings**, converts true values - ('1', 'on', 'yes', and 'true') to 1 and false values ('0', 'off', - 'no', 'false', and '') to 0. Validators need only be set once per - setting. See the `docutils.frontend.validate_*` functions. - - See the optparse docs for more details. - - - More triples of group title, description, options, as many times as - needed. Thus, `settings_spec` tuples can be simply concatenated. - """ - - settings_defaults = None - """A dictionary of defaults for settings not in `settings_spec` (internal - settings, intended to be inaccessible by command-line and config file). - Override in subclasses.""" - - settings_default_overrides = None - """A dictionary of auxiliary defaults, to override defaults for settings - defined in other components. Override in subclasses.""" - - relative_path_settings = () - """Settings containing filesystem paths. Override in subclasses. - Settings listed here are to be interpreted relative to the current working - directory.""" - - config_section = None - """The name of the config file section specific to this component - (lowercase, no brackets). Override in subclasses.""" - - config_section_dependencies = None - """A list of names of config file sections that are to be applied before - `config_section`, in order (from general to specific). In other words, - the settings in `config_section` are to be overlaid on top of the settings - from these sections. The "general" section is assumed implicitly. - Override in subclasses.""" - - -class TransformSpec: - - """ - Runtime transform specification base class. - - TransformSpec subclass objects used by `docutils.transforms.Transformer`. - """ - - def get_transforms(self): - """Transforms required by this class. Override in subclasses.""" - if self.default_transforms != (): - import warnings - warnings.warn('default_transforms attribute deprecated.\n' - 'Use get_transforms() method instead.', - DeprecationWarning) - return list(self.default_transforms) - return [] - - # Deprecated; for compatibility. - default_transforms = () - - unknown_reference_resolvers = () - """List of functions to try to resolve unknown references. Unknown - references have a 'refname' attribute which doesn't correspond to any - target in the document. Called when the transforms in - `docutils.tranforms.references` are unable to find a correct target. The - list should contain functions which will try to resolve unknown - references, with the following signature:: - - def reference_resolver(node): - '''Returns boolean: true if resolved, false if not.''' - - If the function is able to resolve the reference, it should also remove - the 'refname' attribute and mark the node as resolved:: - - del node['refname'] - node.resolved = 1 - - Each function must have a "priority" attribute which will affect the order - the unknown_reference_resolvers are run:: - - reference_resolver.priority = 100 - - Override in subclasses.""" - - -class Component(SettingsSpec, TransformSpec): - - """Base class for Docutils components.""" - - component_type = None - """Name of the component type ('reader', 'parser', 'writer'). Override in - subclasses.""" - - supported = () - """Names for this component. Override in subclasses.""" - - def supports(self, format): - """ - Is `format` supported by this component? - - To be used by transforms to ask the dependent component if it supports - a certain input context or output format. - """ - return format in self.supported diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index ec71a66483a8f9dbc6e4c5ab056340ac4c859829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3952 zcmb7H%X8dF8J9Gg@p$~m#K~qUc7dii;Gt&5OHu5>yb|Jta#iBEVrQ2UwaBu%$D>#y zDcvnQo(fe|C0DMT;g}+zHZIK-lf=;-974-`g{Jqhn{V0bR1lN zJ^A=IPrm6m|DeV4)yCpJhWZ00?gS2ZxtF?ui{D1-O&USNb+{k+ycsk_gSYs~YcFVt z7M`~;Rxvt!?f0!~p7>kX{$ z@Vi*w1=UTg-r@JKx+gZo=4(H=#l0h^_iprQ({Vb-<3ut1>#<;ad0grwRc!n4N{{o* zY)nL^Bb{LN49^ms2-Ran6rV?DV%X^%+BIOgLslD7Uz>9&%lbEMoO?ajg%6q&&11E6o&hJE6R9>Eo8kAQjv5?Hp=D1 zND8qApeV(49;D*Q$zge#CTc9?$%$pdKoI+d-4DOF-J>UYb|JDvWU&CVQJKXggff&z z5>ktd8|qKXOeYh;l+ZfK&R{#JG6Bg!nq&e}X(2~ZEc!%pl$@2)8grDuAU)77WF8Bp zaJJ8&!9p>^W&l2xYmys&hcdrNxKJ!&WtNc2?7`u_Ihp2{gH&9I6kLl^8@=*UB&aaPlwHQV6zV5O-^MbuM7nRAc#p6kD-|%^ni`Xnb4k|u=){G zg@}_VO{RjAU{F$uvoek3K)fs@DVt{l@-t^zywo6)!b+s(QF&TJ%Yr41va=FEQ@iX@ zeLFDJM@bBJMPW>yk3dIGteuKTDiGUcM_0hs%f;)~DE2X%SVS@ye8$kIC`H80X+kDs zyLo&J&!%{RU5=A@3>VPbnh-?j;*pM^t;$Oo3uAvE0pi11mapNVWt1uM9E7YRgOy~A z(<>Ot@Hb~KB}@xeIwx_H(G}Y}JOcUJO;%kKuuFktLH<+}xx`^0SzReOja^1EgRzz% zKS@+9Qdn5zr2<)^WWxKVFnv}_(l=r)#D_NanA#~NsEx&>M%X;ABNN%FFz7JuV(`{^ zmR};DJl$sz=LQhj8QINHU|9q*q&4sw%fy8LlCnDp^6`?!^WZc=U;@`>1Tdmkfmofy zQ3_PsLVGi&{)g4t$M7`*V;^~J zI+#Sy0nJI0nK_m@kdX?6j16!g904}l`>YE-RTHrorN_Ni)ikH^L&xa{=d1N)0#(aW zs8;G-xdsw3$-8{HSlq`@>zIUt`sD;3cTqjOs{5cQQrMO9;zv^E^5AWwYKI}I8irLT z3~h|zemx9dlu>G*ymjPlP&3oNez>D2#ZHkFgEFHy6ntNmk zc9!afByoOCa(S5Aj#+;t;aB$%sa9&aF_UH?m)xSgJD5Jjm~o-?|K_rdrwbDW4ep`5 zH-aWc3->GdZDXwR2F&MI>qm9LI6|_V{tlRA>_#oIc@&w>R*XeqG;zn+G6kl}Q&S;X ze)?R*0P-xOoXjjZoY$=SFhN-W?d)L*9$j5kyq57C!InU8?o;Tz+ z_t0;;zja@^fAqMo8-Ma#NBi{rHKO>;fr8EHkLL6hGRliGk+v3TY7GsjhKxO_eTm*; zEFiJ zaocXo^ZxBOI_~uSxn;=p!|R9YkXgAAGV&dek>8-{T};7yWoF7px;)QYOCUlk5UF$9Vbuvio4&$+F(f0F=ot^{Wb75OSV;Q1sM}$r7SnB_qSnRQ zif1E=&Y)7S&PDBc@_lGmwd`9%ALm!ragog~*khI(D8oX5vw0YH9oTsVHq)L*Hf(?_t ztp+H>Yhg&RL#TwIY~Y2eyV#)*C?xtjiybatzEt7h>PNHhFjH$yX{=hd)R-)5&}k(4 yA_c1Uk8LyXQ+#sT9OZw|cGnxwWX*Fu$NP`pz_0!D@cYl!y5H)0-9~qRbNFA-ZHVgt diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/core.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/core.cpython-38.pyc deleted file mode 100644 index 4f08713c10a09963f9d311be85180e343253e861..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21680 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 YF6@SOedp9&Q@2ll-1@ln>g47B2fwM=J^%m! diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/io.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/io.cpython-38.pyc deleted file mode 100644 index eb68a11df23e74c274be7b4271d02c02d078e8fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13275 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 GKmP%C8MAKy diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/statemachine.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/__pycache__/statemachine.cpython-38.pyc deleted file mode 100644 index afcbb779c070b0d6de8f231a8371769889b79119..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49143 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 -# Copyright: This module has been placed in the public domain. - -""" -Calling the ``publish_*`` convenience functions (or instantiating a -`Publisher` object) with component names will result in default -behavior. For custom behavior (setting component options), create -custom component objects first, and pass *them* to -``publish_*``/`Publisher`. See `The Docutils Publisher`_. - -.. _The Docutils Publisher: http://docutils.sf.net/docs/api/publisher.html -""" -from __future__ import print_function - -__docformat__ = 'reStructuredText' - -import sys -import pprint -from docutils import __version__, __version_details__, SettingsSpec -from docutils import frontend, io, utils, readers, writers -from docutils.frontend import OptionParser -from docutils.transforms import Transformer -from docutils.utils.error_reporting import ErrorOutput, ErrorString -import docutils.readers.doctree - -class Publisher(object): - - """ - A facade encapsulating the high-level logic of a Docutils system. - """ - - def __init__(self, reader=None, parser=None, writer=None, - source=None, source_class=io.FileInput, - destination=None, destination_class=io.FileOutput, - settings=None): - """ - Initial setup. If any of `reader`, `parser`, or `writer` are not - specified, the corresponding ``set_...`` method should be called with - a component name (`set_reader` sets the parser as well). - """ - - self.document = None - """The document tree (`docutils.nodes` objects).""" - - self.reader = reader - """A `docutils.readers.Reader` instance.""" - - self.parser = parser - """A `docutils.parsers.Parser` instance.""" - - self.writer = writer - """A `docutils.writers.Writer` instance.""" - - for component in 'reader', 'parser', 'writer': - assert not isinstance(getattr(self, component), str), ( - 'passed string "%s" as "%s" parameter; pass an instance, ' - 'or use the "%s_name" parameter instead (in ' - 'docutils.core.publish_* convenience functions).' - % (getattr(self, component), component, component)) - - self.source = source - """The source of input data, a `docutils.io.Input` instance.""" - - self.source_class = source_class - """The class for dynamically created source objects.""" - - self.destination = destination - """The destination for docutils output, a `docutils.io.Output` - instance.""" - - self.destination_class = destination_class - """The class for dynamically created destination objects.""" - - self.settings = settings - """An object containing Docutils settings as instance attributes. - Set by `self.process_command_line()` or `self.get_settings()`.""" - - self._stderr = ErrorOutput() - - def set_reader(self, reader_name, parser, parser_name): - """Set `self.reader` by name.""" - reader_class = readers.get_reader_class(reader_name) - self.reader = reader_class(parser, parser_name) - self.parser = self.reader.parser - - def set_writer(self, writer_name): - """Set `self.writer` by name.""" - writer_class = writers.get_writer_class(writer_name) - self.writer = writer_class() - - def set_components(self, reader_name, parser_name, writer_name): - if self.reader is None: - self.set_reader(reader_name, self.parser, parser_name) - if self.parser is None: - if self.reader.parser is None: - self.reader.set_parser(parser_name) - self.parser = self.reader.parser - if self.writer is None: - self.set_writer(writer_name) - - def setup_option_parser(self, usage=None, description=None, - settings_spec=None, config_section=None, - **defaults): - if config_section: - if not settings_spec: - settings_spec = SettingsSpec() - settings_spec.config_section = config_section - parts = config_section.split() - if len(parts) > 1 and parts[-1] == 'application': - settings_spec.config_section_dependencies = ['applications'] - #@@@ Add self.source & self.destination to components in future? - option_parser = OptionParser( - components=(self.parser, self.reader, self.writer, settings_spec), - defaults=defaults, read_config_files=True, - usage=usage, description=description) - return option_parser - - def get_settings(self, usage=None, description=None, - settings_spec=None, config_section=None, **defaults): - """ - Set and return default settings (overrides in `defaults` dict). - - Set components first (`self.set_reader` & `self.set_writer`). - Explicitly setting `self.settings` disables command line option - processing from `self.publish()`. - """ - option_parser = self.setup_option_parser( - usage, description, settings_spec, config_section, **defaults) - self.settings = option_parser.get_default_values() - return self.settings - - def process_programmatic_settings(self, settings_spec, - settings_overrides, - config_section): - if self.settings is None: - defaults = (settings_overrides or {}).copy() - # Propagate exceptions by default when used programmatically: - defaults.setdefault('traceback', True) - self.get_settings(settings_spec=settings_spec, - config_section=config_section, - **defaults) - - def process_command_line(self, argv=None, usage=None, description=None, - settings_spec=None, config_section=None, - **defaults): - """ - Pass an empty list to `argv` to avoid reading `sys.argv` (the - default). - - Set components first (`self.set_reader` & `self.set_writer`). - """ - option_parser = self.setup_option_parser( - usage, description, settings_spec, config_section, **defaults) - if argv is None: - argv = sys.argv[1:] - # converting to Unicode (Python 3 does this automatically): - if sys.version_info < (3, 0): - # TODO: make this failsafe and reversible? - argv_encoding = (frontend.locale_encoding or 'ascii') - argv = [a.decode(argv_encoding) for a in argv] - self.settings = option_parser.parse_args(argv) - - def set_io(self, source_path=None, destination_path=None): - if self.source is None: - self.set_source(source_path=source_path) - if self.destination is None: - self.set_destination(destination_path=destination_path) - - def set_source(self, source=None, source_path=None): - if source_path is None: - source_path = self.settings._source - else: - self.settings._source = source_path - # Raise IOError instead of system exit with `tracback == True` - # TODO: change io.FileInput's default behaviour and remove this hack - try: - self.source = self.source_class( - source=source, source_path=source_path, - encoding=self.settings.input_encoding) - except TypeError: - self.source = self.source_class( - source=source, source_path=source_path, - encoding=self.settings.input_encoding) - - def set_destination(self, destination=None, destination_path=None): - if destination_path is None: - destination_path = self.settings._destination - else: - self.settings._destination = destination_path - self.destination = self.destination_class( - destination=destination, destination_path=destination_path, - encoding=self.settings.output_encoding, - error_handler=self.settings.output_encoding_error_handler) - - def apply_transforms(self): - self.document.transformer.populate_from_components( - (self.source, self.reader, self.reader.parser, self.writer, - self.destination)) - self.document.transformer.apply_transforms() - - def publish(self, argv=None, usage=None, description=None, - settings_spec=None, settings_overrides=None, - config_section=None, enable_exit_status=False): - """ - Process command line options and arguments (if `self.settings` not - already set), run `self.reader` and then `self.writer`. Return - `self.writer`'s output. - """ - exit = None - try: - if self.settings is None: - self.process_command_line( - argv, usage, description, settings_spec, config_section, - **(settings_overrides or {})) - self.set_io() - self.document = self.reader.read(self.source, self.parser, - self.settings) - self.apply_transforms() - output = self.writer.write(self.document, self.destination) - self.writer.assemble_parts() - except SystemExit as error: - exit = 1 - exit_status = error.code - except Exception as error: - if not self.settings: # exception too early to report nicely - raise - if self.settings.traceback: # Propagate exceptions? - self.debugging_dumps() - raise - self.report_Exception(error) - exit = True - exit_status = 1 - self.debugging_dumps() - if (enable_exit_status and self.document - and (self.document.reporter.max_level - >= self.settings.exit_status_level)): - sys.exit(self.document.reporter.max_level + 10) - elif exit: - sys.exit(exit_status) - return output - - def debugging_dumps(self): - if not self.document: - return - if self.settings.dump_settings: - print('\n::: Runtime settings:', file=self._stderr) - print(pprint.pformat(self.settings.__dict__), file=self._stderr) - if self.settings.dump_internals: - print('\n::: Document internals:', file=self._stderr) - print(pprint.pformat(self.document.__dict__), file=self._stderr) - if self.settings.dump_transforms: - print('\n::: Transforms applied:', file=self._stderr) - print(' (priority, transform class, pending node details, ' - 'keyword args)', file=self._stderr) - print(pprint.pformat( - [(priority, '%s.%s' % (xclass.__module__, xclass.__name__), - pending and pending.details, kwargs) - for priority, xclass, pending, kwargs - in self.document.transformer.applied]), file=self._stderr) - if self.settings.dump_pseudo_xml: - print('\n::: Pseudo-XML:', file=self._stderr) - print(self.document.pformat().encode( - 'raw_unicode_escape'), file=self._stderr) - - def report_Exception(self, error): - if isinstance(error, utils.SystemMessage): - self.report_SystemMessage(error) - elif isinstance(error, UnicodeEncodeError): - self.report_UnicodeError(error) - elif isinstance(error, io.InputError): - self._stderr.write(u'Unable to open source file for reading:\n' - u' %s\n' % ErrorString(error)) - elif isinstance(error, io.OutputError): - self._stderr.write( - u'Unable to open destination file for writing:\n' - u' %s\n' % ErrorString(error)) - else: - print(u'%s' % ErrorString(error), file=self._stderr) - print(("""\ -Exiting due to error. Use "--traceback" to diagnose. -Please report errors to . -Include "--traceback" output, Docutils version (%s%s), -Python version (%s), your OS type & version, and the -command line used.""" % (__version__, - docutils.__version_details__ and - ' [%s]'%docutils.__version_details__ or '', - sys.version.split()[0])), file=self._stderr) - - def report_SystemMessage(self, error): - print('Exiting due to level-%s (%s) system message.' % ( - error.level, utils.Reporter.levels[error.level]), - file=self._stderr) - - def report_UnicodeError(self, error): - data = error.object[error.start:error.end] - self._stderr.write( - '%s\n' - '\n' - 'The specified output encoding (%s) cannot\n' - 'handle all of the output.\n' - 'Try setting "--output-encoding-error-handler" to\n' - '\n' - '* "xmlcharrefreplace" (for HTML & XML output);\n' - ' the output will contain "%s" and should be usable.\n' - '* "backslashreplace" (for other output formats);\n' - ' look for "%s" in the output.\n' - '* "replace"; look for "?" in the output.\n' - '\n' - '"--output-encoding-error-handler" is currently set to "%s".\n' - '\n' - 'Exiting due to error. Use "--traceback" to diagnose.\n' - 'If the advice above doesn\'t eliminate the error,\n' - 'please report it to .\n' - 'Include "--traceback" output, Docutils version (%s),\n' - 'Python version (%s), your OS type & version, and the\n' - 'command line used.\n' - % (ErrorString(error), - self.settings.output_encoding, - data.encode('ascii', 'xmlcharrefreplace'), - data.encode('ascii', 'backslashreplace'), - self.settings.output_encoding_error_handler, - __version__, sys.version.split()[0])) - -default_usage = '%prog [options] [ []]' -default_description = ('Reads from (default is stdin) and writes to ' - ' (default is stdout). See ' - ' for ' - 'the full reference.') - -def publish_cmdline(reader=None, reader_name='standalone', - parser=None, parser_name='restructuredtext', - writer=None, writer_name='pseudoxml', - settings=None, settings_spec=None, - settings_overrides=None, config_section=None, - enable_exit_status=True, argv=None, - usage=default_usage, description=default_description): - """ - Set up & run a `Publisher` for command-line-based file I/O (input and - output file paths taken automatically from the command line). Return the - encoded string output also. - - Parameters: see `publish_programmatically` for the remainder. - - - `argv`: Command-line argument list to use instead of ``sys.argv[1:]``. - - `usage`: Usage string, output if there's a problem parsing the command - line. - - `description`: Program description, output for the "--help" option - (along with command-line option descriptions). - """ - pub = Publisher(reader, parser, writer, settings=settings) - pub.set_components(reader_name, parser_name, writer_name) - output = pub.publish( - argv, usage, description, settings_spec, settings_overrides, - config_section=config_section, enable_exit_status=enable_exit_status) - return output - -def publish_file(source=None, source_path=None, - destination=None, destination_path=None, - reader=None, reader_name='standalone', - parser=None, parser_name='restructuredtext', - writer=None, writer_name='pseudoxml', - settings=None, settings_spec=None, settings_overrides=None, - config_section=None, enable_exit_status=False): - """ - Set up & run a `Publisher` for programmatic use with file-like I/O. - Return the encoded string output also. - - Parameters: see `publish_programmatically`. - """ - output, pub = publish_programmatically( - source_class=io.FileInput, source=source, source_path=source_path, - destination_class=io.FileOutput, - destination=destination, destination_path=destination_path, - reader=reader, reader_name=reader_name, - parser=parser, parser_name=parser_name, - writer=writer, writer_name=writer_name, - settings=settings, settings_spec=settings_spec, - settings_overrides=settings_overrides, - config_section=config_section, - enable_exit_status=enable_exit_status) - return output - -def publish_string(source, source_path=None, destination_path=None, - reader=None, reader_name='standalone', - parser=None, parser_name='restructuredtext', - writer=None, writer_name='pseudoxml', - settings=None, settings_spec=None, - settings_overrides=None, config_section=None, - enable_exit_status=False): - """ - Set up & run a `Publisher` for programmatic use with string I/O. Return - the encoded string or Unicode string output. - - For encoded string output, be sure to set the 'output_encoding' setting to - the desired encoding. Set it to 'unicode' for unencoded Unicode string - output. Here's one way:: - - publish_string(..., settings_overrides={'output_encoding': 'unicode'}) - - Similarly for Unicode string input (`source`):: - - publish_string(..., settings_overrides={'input_encoding': 'unicode'}) - - Parameters: see `publish_programmatically`. - """ - output, pub = publish_programmatically( - source_class=io.StringInput, source=source, source_path=source_path, - destination_class=io.StringOutput, - destination=None, destination_path=destination_path, - reader=reader, reader_name=reader_name, - parser=parser, parser_name=parser_name, - writer=writer, writer_name=writer_name, - settings=settings, settings_spec=settings_spec, - settings_overrides=settings_overrides, - config_section=config_section, - enable_exit_status=enable_exit_status) - return output - -def publish_parts(source, source_path=None, source_class=io.StringInput, - destination_path=None, - reader=None, reader_name='standalone', - parser=None, parser_name='restructuredtext', - writer=None, writer_name='pseudoxml', - settings=None, settings_spec=None, - settings_overrides=None, config_section=None, - enable_exit_status=False): - """ - Set up & run a `Publisher`, and return a dictionary of document parts. - Dictionary keys are the names of parts, and values are Unicode strings; - encoding is up to the client. For programmatic use with string I/O. - - For encoded string input, be sure to set the 'input_encoding' setting to - the desired encoding. Set it to 'unicode' for unencoded Unicode string - input. Here's how:: - - publish_parts(..., settings_overrides={'input_encoding': 'unicode'}) - - Parameters: see `publish_programmatically`. - """ - output, pub = publish_programmatically( - source=source, source_path=source_path, source_class=source_class, - destination_class=io.StringOutput, - destination=None, destination_path=destination_path, - reader=reader, reader_name=reader_name, - parser=parser, parser_name=parser_name, - writer=writer, writer_name=writer_name, - settings=settings, settings_spec=settings_spec, - settings_overrides=settings_overrides, - config_section=config_section, - enable_exit_status=enable_exit_status) - return pub.writer.parts - -def publish_doctree(source, source_path=None, - source_class=io.StringInput, - reader=None, reader_name='standalone', - parser=None, parser_name='restructuredtext', - settings=None, settings_spec=None, - settings_overrides=None, config_section=None, - enable_exit_status=False): - """ - Set up & run a `Publisher` for programmatic use with string I/O. - Return the document tree. - - For encoded string input, be sure to set the 'input_encoding' setting to - the desired encoding. Set it to 'unicode' for unencoded Unicode string - input. Here's one way:: - - publish_doctree(..., settings_overrides={'input_encoding': 'unicode'}) - - Parameters: see `publish_programmatically`. - """ - pub = Publisher(reader=reader, parser=parser, writer=None, - settings=settings, - source_class=source_class, - destination_class=io.NullOutput) - pub.set_components(reader_name, parser_name, 'null') - pub.process_programmatic_settings( - settings_spec, settings_overrides, config_section) - pub.set_source(source, source_path) - pub.set_destination(None, None) - output = pub.publish(enable_exit_status=enable_exit_status) - return pub.document - -def publish_from_doctree(document, destination_path=None, - writer=None, writer_name='pseudoxml', - settings=None, settings_spec=None, - settings_overrides=None, config_section=None, - enable_exit_status=False): - """ - Set up & run a `Publisher` to render from an existing document - tree data structure, for programmatic use with string I/O. Return - the encoded string output. - - Note that document.settings is overridden; if you want to use the settings - of the original `document`, pass settings=document.settings. - - Also, new document.transformer and document.reporter objects are - generated. - - For encoded string output, be sure to set the 'output_encoding' setting to - the desired encoding. Set it to 'unicode' for unencoded Unicode string - output. Here's one way:: - - publish_from_doctree( - ..., settings_overrides={'output_encoding': 'unicode'}) - - Parameters: `document` is a `docutils.nodes.document` object, an existing - document tree. - - Other parameters: see `publish_programmatically`. - """ - reader = docutils.readers.doctree.Reader(parser_name='null') - pub = Publisher(reader, None, writer, - source=io.DocTreeInput(document), - destination_class=io.StringOutput, settings=settings) - if not writer and writer_name: - pub.set_writer(writer_name) - pub.process_programmatic_settings( - settings_spec, settings_overrides, config_section) - pub.set_destination(None, destination_path) - return pub.publish(enable_exit_status=enable_exit_status) - -def publish_cmdline_to_binary(reader=None, reader_name='standalone', - parser=None, parser_name='restructuredtext', - writer=None, writer_name='pseudoxml', - settings=None, settings_spec=None, - settings_overrides=None, config_section=None, - enable_exit_status=True, argv=None, - usage=default_usage, description=default_description, - destination=None, destination_class=io.BinaryFileOutput - ): - """ - Set up & run a `Publisher` for command-line-based file I/O (input and - output file paths taken automatically from the command line). Return the - encoded string output also. - - This is just like publish_cmdline, except that it uses - io.BinaryFileOutput instead of io.FileOutput. - - Parameters: see `publish_programmatically` for the remainder. - - - `argv`: Command-line argument list to use instead of ``sys.argv[1:]``. - - `usage`: Usage string, output if there's a problem parsing the command - line. - - `description`: Program description, output for the "--help" option - (along with command-line option descriptions). - """ - pub = Publisher(reader, parser, writer, settings=settings, - destination_class=destination_class) - pub.set_components(reader_name, parser_name, writer_name) - output = pub.publish( - argv, usage, description, settings_spec, settings_overrides, - config_section=config_section, enable_exit_status=enable_exit_status) - return output - -def publish_programmatically(source_class, source, source_path, - destination_class, destination, destination_path, - reader, reader_name, - parser, parser_name, - writer, writer_name, - settings, settings_spec, - settings_overrides, config_section, - enable_exit_status): - """ - Set up & run a `Publisher` for custom programmatic use. Return the - encoded string output and the Publisher object. - - Applications should not need to call this function directly. If it does - seem to be necessary to call this function directly, please write to the - Docutils-develop mailing list - . - - Parameters: - - * `source_class` **required**: The class for dynamically created source - objects. Typically `io.FileInput` or `io.StringInput`. - - * `source`: Type depends on `source_class`: - - - If `source_class` is `io.FileInput`: Either a file-like object - (must have 'read' and 'close' methods), or ``None`` - (`source_path` is opened). If neither `source` nor - `source_path` are supplied, `sys.stdin` is used. - - - If `source_class` is `io.StringInput` **required**: The input - string, either an encoded 8-bit string (set the - 'input_encoding' setting to the correct encoding) or a Unicode - string (set the 'input_encoding' setting to 'unicode'). - - * `source_path`: Type depends on `source_class`: - - - `io.FileInput`: Path to the input file, opened if no `source` - supplied. - - - `io.StringInput`: Optional. Path to the file or object that produced - `source`. Only used for diagnostic output. - - * `destination_class` **required**: The class for dynamically created - destination objects. Typically `io.FileOutput` or `io.StringOutput`. - - * `destination`: Type depends on `destination_class`: - - - `io.FileOutput`: Either a file-like object (must have 'write' and - 'close' methods), or ``None`` (`destination_path` is opened). If - neither `destination` nor `destination_path` are supplied, - `sys.stdout` is used. - - - `io.StringOutput`: Not used; pass ``None``. - - * `destination_path`: Type depends on `destination_class`: - - - `io.FileOutput`: Path to the output file. Opened if no `destination` - supplied. - - - `io.StringOutput`: Path to the file or object which will receive the - output; optional. Used for determining relative paths (stylesheets, - source links, etc.). - - * `reader`: A `docutils.readers.Reader` object. - - * `reader_name`: Name or alias of the Reader class to be instantiated if - no `reader` supplied. - - * `parser`: A `docutils.parsers.Parser` object. - - * `parser_name`: Name or alias of the Parser class to be instantiated if - no `parser` supplied. - - * `writer`: A `docutils.writers.Writer` object. - - * `writer_name`: Name or alias of the Writer class to be instantiated if - no `writer` supplied. - - * `settings`: A runtime settings (`docutils.frontend.Values`) object, for - dotted-attribute access to runtime settings. It's the end result of the - `SettingsSpec`, config file, and option processing. If `settings` is - passed, it's assumed to be complete and no further setting/config/option - processing is done. - - * `settings_spec`: A `docutils.SettingsSpec` subclass or object. Provides - extra application-specific settings definitions independently of - components. In other words, the application becomes a component, and - its settings data is processed along with that of the other components. - Used only if no `settings` specified. - - * `settings_overrides`: A dictionary containing application-specific - settings defaults that override the defaults of other components. - Used only if no `settings` specified. - - * `config_section`: A string, the name of the configuration file section - for this application. Overrides the ``config_section`` attribute - defined by `settings_spec`. Used only if no `settings` specified. - - * `enable_exit_status`: Boolean; enable exit status at end of processing? - """ - pub = Publisher(reader, parser, writer, settings=settings, - source_class=source_class, - destination_class=destination_class) - pub.set_components(reader_name, parser_name, writer_name) - pub.process_programmatic_settings( - settings_spec, settings_overrides, config_section) - pub.set_source(source, source_path) - pub.set_destination(destination, destination_path) - output = pub.publish(enable_exit_status=enable_exit_status) - return output, pub diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/examples.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/examples.py deleted file mode 100644 index 395dbbf..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/examples.py +++ /dev/null @@ -1,97 +0,0 @@ -# $Id: examples.py 7320 2012-01-19 22:33:02Z milde $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -This module contains practical examples of Docutils client code. - -Importing this module from client code is not recommended; its contents are -subject to change in future Docutils releases. Instead, it is recommended -that you copy and paste the parts you need into your own code, modifying as -necessary. -""" - -from docutils import core, io - - -def html_parts(input_string, source_path=None, destination_path=None, - input_encoding='unicode', doctitle=True, - initial_header_level=1): - """ - Given an input string, returns a dictionary of HTML document parts. - - Dictionary keys are the names of parts, and values are Unicode strings; - encoding is up to the client. - - Parameters: - - - `input_string`: A multi-line text string; required. - - `source_path`: Path to the source file or object. Optional, but useful - for diagnostic output (system messages). - - `destination_path`: Path to the file or object which will receive the - output; optional. Used for determining relative paths (stylesheets, - source links, etc.). - - `input_encoding`: The encoding of `input_string`. If it is an encoded - 8-bit string, provide the correct encoding. If it is a Unicode string, - use "unicode", the default. - - `doctitle`: Disable the promotion of a lone top-level section title to - document title (and subsequent section title to document subtitle - promotion); enabled by default. - - `initial_header_level`: The initial level for header elements (e.g. 1 - for "

"). - """ - overrides = {'input_encoding': input_encoding, - 'doctitle_xform': doctitle, - 'initial_header_level': initial_header_level} - parts = core.publish_parts( - source=input_string, source_path=source_path, - destination_path=destination_path, - writer_name='html', settings_overrides=overrides) - return parts - -def html_body(input_string, source_path=None, destination_path=None, - input_encoding='unicode', output_encoding='unicode', - doctitle=True, initial_header_level=1): - """ - Given an input string, returns an HTML fragment as a string. - - The return value is the contents of the element. - - Parameters (see `html_parts()` for the remainder): - - - `output_encoding`: The desired encoding of the output. If a Unicode - string is desired, use the default value of "unicode" . - """ - parts = html_parts( - input_string=input_string, source_path=source_path, - destination_path=destination_path, - input_encoding=input_encoding, doctitle=doctitle, - initial_header_level=initial_header_level) - fragment = parts['html_body'] - if output_encoding != 'unicode': - fragment = fragment.encode(output_encoding) - return fragment - -def internals(input_string, source_path=None, destination_path=None, - input_encoding='unicode', settings_overrides=None): - """ - Return the document tree and publisher, for exploring Docutils internals. - - Parameters: see `html_parts()`. - """ - if settings_overrides: - overrides = settings_overrides.copy() - else: - overrides = {} - overrides['input_encoding'] = input_encoding - output, pub = core.publish_programmatically( - source_class=io.StringInput, source=input_string, - source_path=source_path, - destination_class=io.NullOutput, destination=None, - destination_path=destination_path, - reader=None, reader_name='standalone', - parser=None, parser_name='restructuredtext', - writer=None, writer_name='null', - settings=None, settings_spec=None, settings_overrides=overrides, - config_section=None, enable_exit_status=None) - return pub.writer.document, pub diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/frontend.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/frontend.py deleted file mode 100644 index ff571cc..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/frontend.py +++ /dev/null @@ -1,863 +0,0 @@ -# $Id: frontend.py 8439 2019-12-13 17:02:41Z milde $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -Command-line and common processing for Docutils front-end tools. - -Exports the following classes: - -* `OptionParser`: Standard Docutils command-line processing. -* `Option`: Customized version of `optparse.Option`; validation support. -* `Values`: Runtime settings; objects are simple structs - (``object.attribute``). Supports cumulative list settings (attributes). -* `ConfigParser`: Standard Docutils config file processing. - -Also exports the following functions: - -* Option callbacks: `store_multiple`, `read_config_file`. -* Setting validators: `validate_encoding`, - `validate_encoding_error_handler`, - `validate_encoding_and_error_handler`, - `validate_boolean`, `validate_ternary`, `validate_threshold`, - `validate_colon_separated_string_list`, - `validate_comma_separated_string_list`, - `validate_dependency_file`. -* `make_paths_absolute`. -* SettingSpec manipulation: `filter_settings_spec`. -""" - -__docformat__ = 'reStructuredText' - -import os -import os.path -import sys -import warnings -import codecs -import optparse -from optparse import SUPPRESS_HELP -if sys.version_info >= (3, 0): - from configparser import RawConfigParser - from os import getcwd -else: - from ConfigParser import RawConfigParser - from os import getcwdu as getcwd - -import docutils -import docutils.utils -import docutils.nodes -from docutils.utils.error_reporting import (locale_encoding, SafeString, - ErrorOutput, ErrorString) - -if sys.version_info >= (3, 0): - unicode = str # noqa - - -def store_multiple(option, opt, value, parser, *args, **kwargs): - """ - Store multiple values in `parser.values`. (Option callback.) - - Store `None` for each attribute named in `args`, and store the value for - each key (attribute name) in `kwargs`. - """ - for attribute in args: - setattr(parser.values, attribute, None) - for key, value in kwargs.items(): - setattr(parser.values, key, value) - -def read_config_file(option, opt, value, parser): - """ - Read a configuration file during option processing. (Option callback.) - """ - try: - new_settings = parser.get_config_file_settings(value) - except ValueError as error: - parser.error(error) - parser.values.update(new_settings, parser) - -def validate_encoding(setting, value, option_parser, - config_parser=None, config_section=None): - try: - codecs.lookup(value) - except LookupError: - raise LookupError('setting "%s": unknown encoding: "%s"' - % (setting, value)) - return value - -def validate_encoding_error_handler(setting, value, option_parser, - config_parser=None, config_section=None): - try: - codecs.lookup_error(value) - except LookupError: - raise LookupError( - 'unknown encoding error handler: "%s" (choices: ' - '"strict", "ignore", "replace", "backslashreplace", ' - '"xmlcharrefreplace", and possibly others; see documentation for ' - 'the Python ``codecs`` module)' % value) - return value - -def validate_encoding_and_error_handler( - setting, value, option_parser, config_parser=None, config_section=None): - """ - Side-effect: if an error handler is included in the value, it is inserted - into the appropriate place as if it was a separate setting/option. - """ - if ':' in value: - encoding, handler = value.split(':') - validate_encoding_error_handler( - setting + '_error_handler', handler, option_parser, - config_parser, config_section) - if config_parser: - config_parser.set(config_section, setting + '_error_handler', - handler) - else: - setattr(option_parser.values, setting + '_error_handler', handler) - else: - encoding = value - validate_encoding(setting, encoding, option_parser, - config_parser, config_section) - return encoding - -def validate_boolean(setting, value, option_parser, - config_parser=None, config_section=None): - """Check/normalize boolean settings: - True: '1', 'on', 'yes', 'true' - False: '0', 'off', 'no','false', '' - """ - if isinstance(value, bool): - return value - try: - return option_parser.booleans[value.strip().lower()] - except KeyError: - raise LookupError('unknown boolean value: "%s"' % value) - -def validate_ternary(setting, value, option_parser, - config_parser=None, config_section=None): - """Check/normalize three-value settings: - True: '1', 'on', 'yes', 'true' - False: '0', 'off', 'no','false', '' - any other value: returned as-is. - """ - if isinstance(value, bool) or value is None: - return value - try: - return option_parser.booleans[value.strip().lower()] - except KeyError: - return value - -def validate_nonnegative_int(setting, value, option_parser, - config_parser=None, config_section=None): - value = int(value) - if value < 0: - raise ValueError('negative value; must be positive or zero') - return value - -def validate_threshold(setting, value, option_parser, - config_parser=None, config_section=None): - try: - return int(value) - except ValueError: - try: - return option_parser.thresholds[value.lower()] - except (KeyError, AttributeError): - raise LookupError('unknown threshold: %r.' % value) - -def validate_colon_separated_string_list( - setting, value, option_parser, config_parser=None, config_section=None): - if not isinstance(value, list): - value = value.split(':') - else: - last = value.pop() - value.extend(last.split(':')) - return value - -def validate_comma_separated_list(setting, value, option_parser, - config_parser=None, config_section=None): - """Check/normalize list arguments (split at "," and strip whitespace). - """ - # `value` is already a ``list`` when given as command line option - # and "action" is "append" and ``unicode`` or ``str`` else. - if not isinstance(value, list): - value = [value] - # this function is called for every option added to `value` - # -> split the last item and append the result: - last = value.pop() - items = [i.strip(u' \t\n') for i in last.split(u',') if i.strip(u' \t\n')] - value.extend(items) - return value - -def validate_url_trailing_slash( - setting, value, option_parser, config_parser=None, config_section=None): - if not value: - return './' - elif value.endswith('/'): - return value - else: - return value + '/' - -def validate_dependency_file(setting, value, option_parser, - config_parser=None, config_section=None): - try: - return docutils.utils.DependencyList(value) - except IOError: - return docutils.utils.DependencyList(None) - -def validate_strip_class(setting, value, option_parser, - config_parser=None, config_section=None): - # value is a comma separated string list: - value = validate_comma_separated_list(setting, value, option_parser, - config_parser, config_section) - # validate list elements: - for cls in value: - normalized = docutils.nodes.make_id(cls) - if cls != normalized: - raise ValueError('Invalid class value %r (perhaps %r?)' - % (cls, normalized)) - return value - -def validate_smartquotes_locales(setting, value, option_parser, - config_parser=None, config_section=None): - """Check/normalize a comma separated list of smart quote definitions. - - Return a list of (language-tag, quotes) string tuples.""" - - # value is a comma separated string list: - value = validate_comma_separated_list(setting, value, option_parser, - config_parser, config_section) - # validate list elements - lc_quotes = [] - for item in value: - try: - lang, quotes = item.split(':', 1) - except AttributeError: - # this function is called for every option added to `value` - # -> ignore if already a tuple: - lc_quotes.append(item) - continue - except ValueError: - raise ValueError(u'Invalid value "%s".' - ' Format is ":".' - % item.encode('ascii', 'backslashreplace')) - # parse colon separated string list: - quotes = quotes.strip() - multichar_quotes = quotes.split(':') - if len(multichar_quotes) == 4: - quotes = multichar_quotes - elif len(quotes) != 4: - raise ValueError('Invalid value "%s". Please specify 4 quotes\n' - ' (primary open/close; secondary open/close).' - % item.encode('ascii', 'backslashreplace')) - lc_quotes.append((lang, quotes)) - return lc_quotes - -def make_paths_absolute(pathdict, keys, base_path=None): - """ - Interpret filesystem path settings relative to the `base_path` given. - - Paths are values in `pathdict` whose keys are in `keys`. Get `keys` from - `OptionParser.relative_path_settings`. - """ - if base_path is None: - base_path = getcwd() # type(base_path) == unicode - # to allow combining non-ASCII cwd with unicode values in `pathdict` - for key in keys: - if key in pathdict: - value = pathdict[key] - if isinstance(value, list): - value = [make_one_path_absolute(base_path, path) - for path in value] - elif value: - value = make_one_path_absolute(base_path, value) - pathdict[key] = value - -def make_one_path_absolute(base_path, path): - return os.path.abspath(os.path.join(base_path, path)) - -def filter_settings_spec(settings_spec, *exclude, **replace): - """Return a copy of `settings_spec` excluding/replacing some settings. - - `settings_spec` is a tuple of configuration settings with a structure - described for docutils.SettingsSpec.settings_spec. - - Optional positional arguments are names of to-be-excluded settings. - Keyword arguments are option specification replacements. - (See the html4strict writer for an example.) - """ - settings = list(settings_spec) - # every third item is a sequence of option tuples - for i in range(2, len(settings), 3): - newopts = [] - for opt_spec in settings[i]: - # opt_spec is ("", [nz*oWeXX zVVsuY%DVN0GN#75AjZ{pLoQ7y0hI#HQ-a@|CJ6_PI7d3E@)sq(BpTr3omg(iDF&~|Y!VMv{DI&K7HsYkJws~i{Y@KkM0(V|p@=pZs^80+{+ zlx|I{;I-B(@f;dKhZ>7T z%4RgDl$TBwk;Q46)Kx(tocnHRCOi$=wFLlgB*VU~(nw8lH@u@vx?+PED!uvSBe7S7 zT?)!?qo`P_=?2n5S0MpP5pBKsg<&?4NR}y;02^3FPhU1Fq_Ee$UPsazBq)4fg4p~= z*^(l-GO-u%8R{i`ppHlPH9`gV^qIM(%`9fk4q>J(&5?Cr02P?P4WGQhug{v&8M*9K(fr6@Kn1K(8C9%*pwC)RILxtV(IM)6W7d|=J{?NjqIF=- zI%u`<-oZ*_`fb*RIe&^Z@MYv403rj%eyYB7b`0^iqFs1|Gg307HtV8~zILnL!YCYI zkAH)+rNV`Y8ndOMTP$I}-NJ%lcFEjsJzrQK>f$n1IK^O?9~mELvtH3a-^HTGmd?Y3 zS&v2*y$x*(#;FYSbcI=tIWSojIq?QcPRiVZE4_PWrb|dx!i|BlfV_TV+_E+*tk5@4 z*dtDT#@c0qm;-sjGRo!^N;89OJh^(8Rv<+>nxVC|y=NDSKW>?8SCkLsSMf5RTfr;^ zYQ6~y3UCEB0e2?8i;lepykHgiPwe*fpqEd#wp6YIZXj?^=T!BvG?CTBRU+|Ys(hO3 z5iDB;0U#AZa;oa<)noaHFD}u?$EZ4ss$3dmlid(GA{@pEf`0|$8jB30+&ypr{Nb!Y z1Nb@G647KkXwbewQI5V?-BJEh`NKU$Ws=ys&pOFoc<~0p@Q%kLJb{4 z>0nVEV@sE|81p=E>m#I40;7;2zC#s>E@&u0An-`>BDHZ;8B#DIp_CRe6?pk{lc?t6 zhcxX3N+j-XqvS86B9zz#PPCMBle;%{2N>~;;h}bnF1f$n1!kl#)$xFkV;iHos#wO} z*)Oq#0U77~MIvN20QfkGpA_FUjQAajas^F^W$)ZV04Gdp9cGA#r}aJYEFR(_RjX7HY898L zQizz8BCb(&sI5a-OrZV-N=_$Lz~ZiDcuzG~1oaP4j{QjJ*HCh*4uLT0d%>cJa2vIB$CD1Ow0}&SUVA4XWJpQ}i96J;@ z1@Q~24wX-`ne#NvGC)n-DlB;V<5%+Z@SKNuS|nu(F7QF1y8~VLG(e_D>j8xe}tw zWBT6XkCd<)`p^dcm+p}Z6e}Il{mYy#KXCW?NOpYOH)evX03PD54oN4&`63VJcKc`I zk*I0<-lY@#ebwCce(R*`lf{d5s$Qe&msGuuDmYci199M%oUhq7a!ZoTOGNQqFG z)OUJ*rL?vl;&@$)D~OYcf`M!ZTC6t|Xz^FFdm MPw$z%=X>w`7uBi~5&!@I diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/peps.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/peps.cpython-38.pyc deleted file mode 100644 index b70e8a4dcb137eb16d642ad77cfccac9450b0d1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8982 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 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/universal.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/universal.cpython-38.pyc deleted file mode 100644 index c443533fb49c735e6b186f15cab8588be7b337e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8493 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 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/writer_aux.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/__pycache__/writer_aux.cpython-38.pyc deleted file mode 100644 index 963ffe78b5dcf65def460e8bc8dcf90d5096df97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2400 zcmbtWOK;pZ5GM85)yivU<0L?nwg6$|kOh)8iariO8st%=En4^zw*`c@DlKwtZKy{` zDtVopS3?Bj_n*G~ z@dH@>VK&RdgUub7>T4hjMTp@DGl#jt$=t}zyvWP^$j1nHp6F%$sE^U-i21Dd46z>X zKXs!3_I(z>KCt@%8$3kg@aV7bZgr4~l*&V*CC$~ekeMPGO>+U9g6wcoDbC2wA^A?G znoE)tSy|*f*J=`m+j}WU7pxMTz$&3afbhn?6^&_iumKtp3MxpU_qg0oVPzJa>=%^) zy*x~cd@9mJr}-{PLATV3i1d+>1C?Ov=FKo9Fs8D|2rH6Gr$U{Gl7%VtUxCTe_bk+& z%0?r}A8J`8x{{o2^8@`Sgcgn6#?K4JRpVO|%|Ot6x1zgTjd3&BZsU^};pO4L<_=8t z9uSToJ1BA>OD=OFkGafyh9aN&5b<6U+&A&7az@|92wAru2&y&D2?TEuT{tBrm2_9q za!*YNc~D5g4`@~je!a^RX#-<|bIaxh-n?yf8kQNiPW7DO3zJML;vG>WkItMey(O@qwX>1*m-=VcA0w_&3nvyfiZ$T zp7(1=7(+ihmyzYIF$Agdx3(WN{gcmV2B)7f4w}FeVFnOr0w}U4Tq-V24KzWUgeFW? znk!B7ghzuf^Cz&~5xnWqvgA2yhLV?pCOlSLOvhg1nWtO<9ns1(l}g9SUMg7Q+s8{J z&%@E*_cnD_ZkB0zqsmK~JmT!e{vPMzM*N}7_~TCwH(PXUcE!KhfpJnEHa>VD4zGba zH3EY0I`(h?bBKG+$T?bT>vLiSw_ZZY#&J$F9>+}>#|yB-dKkx#D=JP-`f&`l<2V{I zKBbk=aVgUR+Q6Z_09LI3OJv>fOfE0MRAv!4-Z{^)ytl&F%3YQfd8*SQS2SuNc8Xo1 zN}iN!-nx>2|m^pooaE$J;OI%{I3qs3ctqX?LEE}9%3z-_71Iriu8!H$>Pg?J&RD2 z$Ww&=0viqZ1e5|oXP$lfFPvk`nfG*m7FgU)0kh6*FbfT483uH&)PQJ=^ssh7Y8B9X z)jUCJZHj@O`^~&DdXA4h-JhRlfce>a4Y&sFe(lXKFt-Lv7}d`FV!c56Rf}qGOZLI9 z21(Od#+RgND$#J4>$q+9a$p1k#kIMTRJ7V2#0gvuQ2@||JBmwbu5F9^DC~-^8N{(| z8gVR5am!UhhDK%Br8XK!y03~#CLEfEfx6^52xu+Sol2W4$VR>C3A)3DYI@L3xYTkD z6pefGoY5Dwjy0aSwxWTd7OL`nW0V+T8pncI%o#9#1yfxCf(+>Y@tk!WIBR(5jId{S zLwt0;`yzGH3FJk1V@aRYY?WSygO6dhKwbwR8{XD9l<&YZTD9H5{98~BJ;L@+bBWvN tNvI;U$is!Ue=S|!(l^JZs;th}InV^R7H#RakyR!yUg$X&@z5QSe*q+odxQW0 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/components.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/components.py deleted file mode 100644 index d3e548c..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/components.py +++ /dev/null @@ -1,52 +0,0 @@ -# $Id: components.py 4564 2006-05-21 20:44:42Z wiemann $ -# Author: David Goodger -# Copyright: This module has been placed in the public domain. - -""" -Docutils component-related transforms. -""" - -__docformat__ = 'reStructuredText' - -import sys -import os -import re -import time -from docutils import nodes, utils -from docutils import ApplicationError, DataError -from docutils.transforms import Transform, TransformError - - -class Filter(Transform): - - """ - Include or exclude elements which depend on a specific Docutils component. - - For use with `nodes.pending` elements. A "pending" element's dictionary - attribute ``details`` must contain the keys "component" and "format". The - value of ``details['component']`` must match the type name of the - component the elements depend on (e.g. "writer"). The value of - ``details['format']`` is the name of a specific format or context of that - component (e.g. "html"). If the matching Docutils component supports that - format or context, the "pending" element is replaced by the contents of - ``details['nodes']`` (a list of nodes); otherwise, the "pending" element - is removed. - - For example, the reStructuredText "meta" directive creates a "pending" - element containing a "meta" element (in ``pending.details['nodes']``). - Only writers (``pending.details['component'] == 'writer'``) supporting the - "html" format (``pending.details['format'] == 'html'``) will include the - "meta" element; it will be deleted from the output of all other writers. - """ - - default_priority = 780 - - def apply(self): - pending = self.startnode - component_type = pending.details['component'] # 'reader' or 'writer' - format = pending.details['format'] - component = self.document.transformer.components[component_type] - if component.supports(format): - pending.replace_self(pending.details['nodes']) - else: - pending.parent.remove(pending) diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/frontmatter.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/frontmatter.py deleted file mode 100644 index 1cb7176..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/frontmatter.py +++ /dev/null @@ -1,548 +0,0 @@ -# $Id: frontmatter.py 8389 2019-09-11 11:39:13Z milde $ -# Author: David Goodger, Ueli Schlaepfer -# Copyright: This module has been placed in the public domain. - -""" -Transforms related to the front matter of a document or a section -(information found before the main text): - -- `DocTitle`: Used to transform a lone top level section's title to - the document title, promote a remaining lone top-level section's - title to the document subtitle, and determine the document's title - metadata (document['title']) based on the document title and/or the - "title" setting. - -- `SectionSubTitle`: Used to transform a lone subsection into a - subtitle. - -- `DocInfo`: Used to transform a bibliographic field list into docinfo - elements. -""" - -__docformat__ = 'reStructuredText' - -import re -import sys - -from docutils import nodes, utils -from docutils.transforms import TransformError, Transform - - -if sys.version_info >= (3, 0): - unicode = str # noqa - - -class TitlePromoter(Transform): - - """ - Abstract base class for DocTitle and SectionSubTitle transforms. - """ - - def promote_title(self, node): - """ - Transform the following tree:: - - -

- - ... - - into :: - - <node> - <title> - ... - - `node` is normally a document. - """ - # Type check - if not isinstance(node, nodes.Element): - raise TypeError('node must be of Element-derived type.') - - # `node` must not have a title yet. - assert not (len(node) and isinstance(node[0], nodes.title)) - section, index = self.candidate_index(node) - if index is None: - return False - - # Transfer the section's attributes to the node: - # NOTE: Change `replace` to False to NOT replace attributes that - # already exist in node with those in section. - # NOTE: Remove `and_source` to NOT copy the 'source' - # attribute from section - node.update_all_atts_concatenating(section, replace=True, and_source=True) - - # setup_child is called automatically for all nodes. - node[:] = (section[:1] # section title - + node[:index] # everything that was in the - # node before the section - + section[1:]) # everything that was in the section - assert isinstance(node[0], nodes.title) - return True - - def promote_subtitle(self, node): - """ - Transform the following node tree:: - - <node> - <title> - <section> - <title> - ... - - into :: - - <node> - <title> - <subtitle> - ... - """ - # Type check - if not isinstance(node, nodes.Element): - raise TypeError('node must be of Element-derived type.') - - subsection, index = self.candidate_index(node) - if index is None: - return False - subtitle = nodes.subtitle() - - # Transfer the subsection's attributes to the new subtitle - # NOTE: Change `replace` to False to NOT replace attributes - # that already exist in node with those in section. - # NOTE: Remove `and_source` to NOT copy the 'source' - # attribute from section. - subtitle.update_all_atts_concatenating(subsection, replace=True, and_source=True) - - # Transfer the contents of the subsection's title to the - # subtitle: - subtitle[:] = subsection[0][:] - node[:] = (node[:1] # title - + [subtitle] - # everything that was before the section: - + node[1:index] - # everything that was in the subsection: - + subsection[1:]) - return True - - def candidate_index(self, node): - """ - Find and return the promotion candidate and its index. - - Return (None, None) if no valid candidate was found. - """ - index = node.first_child_not_matching_class( - nodes.PreBibliographic) - if (index is None or len(node) > (index + 1) - or not isinstance(node[index], nodes.section)): - return None, None - else: - return node[index], index - - -class DocTitle(TitlePromoter): - - """ - In reStructuredText_, there is no way to specify a document title - and subtitle explicitly. Instead, we can supply the document title - (and possibly the subtitle as well) implicitly, and use this - two-step transform to "raise" or "promote" the title(s) (and their - corresponding section contents) to the document level. - - 1. If the document contains a single top-level section as its - first non-comment element, the top-level section's title - becomes the document's title, and the top-level section's - contents become the document's immediate contents. The lone - top-level section header must be the first non-comment element - in the document. - - For example, take this input text:: - - ================= - Top-Level Title - ================= - - A paragraph. - - Once parsed, it looks like this:: - - <document> - <section names="top-level title"> - <title> - Top-Level Title - <paragraph> - A paragraph. - - After running the DocTitle transform, we have:: - - <document names="top-level title"> - <title> - Top-Level Title - <paragraph> - A paragraph. - - 2. If step 1 successfully determines the document title, we - continue by checking for a subtitle. - - If the lone top-level section itself contains a single - second-level section as its first non-comment element, that - section's title is promoted to the document's subtitle, and - that section's contents become the document's immediate - contents. Given this input text:: - - ================= - Top-Level Title - ================= - - Second-Level Title - ~~~~~~~~~~~~~~~~~~ - - A paragraph. - - After parsing and running the Section Promotion transform, the - result is:: - - <document names="top-level title"> - <title> - Top-Level Title - <subtitle names="second-level title"> - Second-Level Title - <paragraph> - A paragraph. - - (Note that the implicit hyperlink target generated by the - "Second-Level Title" is preserved on the "subtitle" element - itself.) - - Any comment elements occurring before the document title or - subtitle are accumulated and inserted as the first body elements - after the title(s). - - This transform also sets the document's metadata title - (document['title']). - - .. _reStructuredText: http://docutils.sf.net/rst.html - """ - - default_priority = 320 - - def set_metadata(self): - """ - Set document['title'] metadata title from the following - sources, listed in order of priority: - - * Existing document['title'] attribute. - * "title" setting. - * Document title node (as promoted by promote_title). - """ - if not self.document.hasattr('title'): - if self.document.settings.title is not None: - self.document['title'] = self.document.settings.title - elif len(self.document) and isinstance(self.document[0], nodes.title): - self.document['title'] = self.document[0].astext() - - def apply(self): - if getattr(self.document.settings, 'doctitle_xform', 1): - # promote_(sub)title defined in TitlePromoter base class. - if self.promote_title(self.document): - # If a title has been promoted, also try to promote a - # subtitle. - self.promote_subtitle(self.document) - # Set document['title']. - self.set_metadata() - - -class SectionSubTitle(TitlePromoter): - - """ - This works like document subtitles, but for sections. For example, :: - - <section> - <title> - Title - <section> - <title> - Subtitle - ... - - is transformed into :: - - <section> - <title> - Title - <subtitle> - Subtitle - ... - - For details refer to the docstring of DocTitle. - """ - - default_priority = 350 - - def apply(self): - if not getattr(self.document.settings, 'sectsubtitle_xform', 1): - return - for section in self.document._traverse(nodes.section): - # On our way through the node tree, we are modifying it - # but only the not-yet-visited part, so that the iterator - # returned by _traverse() is not corrupted. - self.promote_subtitle(section) - - -class DocInfo(Transform): - - """ - This transform is specific to the reStructuredText_ markup syntax; - see "Bibliographic Fields" in the `reStructuredText Markup - Specification`_ for a high-level description. This transform - should be run *after* the `DocTitle` transform. - - Given a field list as the first non-comment element after the - document title and subtitle (if present), registered bibliographic - field names are transformed to the corresponding DTD elements, - becoming child elements of the "docinfo" element (except for a - dedication and/or an abstract, which become "topic" elements after - "docinfo"). - - For example, given this document fragment after parsing:: - - <document> - <title> - Document Title - <field_list> - <field> - <field_name> - Author - <field_body> - <paragraph> - A. Name - <field> - <field_name> - Status - <field_body> - <paragraph> - $RCSfile$ - ... - - After running the bibliographic field list transform, the - resulting document tree would look like this:: - - <document> - <title> - Document Title - <docinfo> - <author> - A. Name - <status> - frontmatter.py - ... - - The "Status" field contained an expanded RCS keyword, which is - normally (but optionally) cleaned up by the transform. The sole - contents of the field body must be a paragraph containing an - expanded RCS keyword of the form "$keyword: expansion text $". Any - RCS keyword can be processed in any bibliographic field. The - dollar signs and leading RCS keyword name are removed. Extra - processing is done for the following RCS keywords: - - - "RCSfile" expands to the name of the file in the RCS or CVS - repository, which is the name of the source file with a ",v" - suffix appended. The transform will remove the ",v" suffix. - - - "Date" expands to the format "YYYY/MM/DD hh:mm:ss" (in the UTC - time zone). The RCS Keywords transform will extract just the - date itself and transform it to an ISO 8601 format date, as in - "2000-12-31". - - (Since the source file for this text is itself stored under CVS, - we can't show an example of the "Date" RCS keyword because we - can't prevent any RCS keywords used in this explanation from - being expanded. Only the "RCSfile" keyword is stable; its - expansion text changes only if the file name changes.) - - .. _reStructuredText: http://docutils.sf.net/rst.html - .. _reStructuredText Markup Specification: - http://docutils.sf.net/docs/ref/rst/restructuredtext.html - """ - - default_priority = 340 - - biblio_nodes = { - 'author': nodes.author, - 'authors': nodes.authors, - 'organization': nodes.organization, - 'address': nodes.address, - 'contact': nodes.contact, - 'version': nodes.version, - 'revision': nodes.revision, - 'status': nodes.status, - 'date': nodes.date, - 'copyright': nodes.copyright, - 'dedication': nodes.topic, - 'abstract': nodes.topic} - """Canonical field name (lowcased) to node class name mapping for - bibliographic fields (field_list).""" - - def apply(self): - if not getattr(self.document.settings, 'docinfo_xform', 1): - return - document = self.document - index = document.first_child_not_matching_class( - nodes.PreBibliographic) - if index is None: - return - candidate = document[index] - if isinstance(candidate, nodes.field_list): - biblioindex = document.first_child_not_matching_class( - (nodes.Titular, nodes.Decorative)) - nodelist = self.extract_bibliographic(candidate) - del document[index] # untransformed field list (candidate) - document[biblioindex:biblioindex] = nodelist - - def extract_bibliographic(self, field_list): - docinfo = nodes.docinfo() - bibliofields = self.language.bibliographic_fields - labels = self.language.labels - topics = {'dedication': None, 'abstract': None} - for field in field_list: - try: - name = field[0][0].astext() - normedname = nodes.fully_normalize_name(name) - if not (len(field) == 2 and normedname in bibliofields - and self.check_empty_biblio_field(field, name)): - raise TransformError - canonical = bibliofields[normedname] - biblioclass = self.biblio_nodes[canonical] - if issubclass(biblioclass, nodes.TextElement): - if not self.check_compound_biblio_field(field, name): - raise TransformError - utils.clean_rcs_keywords( - field[1][0], self.rcs_keyword_substitutions) - docinfo.append(biblioclass('', '', *field[1][0])) - elif issubclass(biblioclass, nodes.authors): - self.extract_authors(field, name, docinfo) - elif issubclass(biblioclass, nodes.topic): - if topics[canonical]: - field[-1] += self.document.reporter.warning( - 'There can only be one "%s" field.' % name, - base_node=field) - raise TransformError - title = nodes.title(name, labels[canonical]) - title[0].rawsource = labels[canonical] - topics[canonical] = biblioclass( - '', title, classes=[canonical], *field[1].children) - else: - docinfo.append(biblioclass('', *field[1].children)) - except TransformError: - if len(field[-1]) == 1 \ - and isinstance(field[-1][0], nodes.paragraph): - utils.clean_rcs_keywords( - field[-1][0], self.rcs_keyword_substitutions) - # if normedname not in bibliofields: - classvalue = nodes.make_id(normedname) - if classvalue: - field['classes'].append(classvalue) - docinfo.append(field) - nodelist = [] - if len(docinfo) != 0: - nodelist.append(docinfo) - for name in ('dedication', 'abstract'): - if topics[name]: - nodelist.append(topics[name]) - return nodelist - - def check_empty_biblio_field(self, field, name): - if len(field[-1]) < 1: - field[-1] += self.document.reporter.warning( - 'Cannot extract empty bibliographic field "%s".' % name, - base_node=field) - return None - return 1 - - def check_compound_biblio_field(self, field, name): - if len(field[-1]) > 1: - field[-1] += self.document.reporter.warning( - 'Cannot extract compound bibliographic field "%s".' % name, - base_node=field) - return None - if not isinstance(field[-1][0], nodes.paragraph): - field[-1] += self.document.reporter.warning( - 'Cannot extract bibliographic field "%s" containing ' - 'anything other than a single paragraph.' % name, - base_node=field) - return None - return 1 - - rcs_keyword_substitutions = [ - (re.compile(r'\$' r'Date: (\d\d\d\d)[-/](\d\d)[-/](\d\d)[ T][\d:]+' - r'[^$]* \$', re.IGNORECASE), r'\1-\2-\3'), - (re.compile(r'\$' r'RCSfile: (.+),v \$', re.IGNORECASE), r'\1'), - (re.compile(r'\$[a-zA-Z]+: (.+) \$'), r'\1'),] - - def extract_authors(self, field, name, docinfo): - try: - if len(field[1]) == 1: - if isinstance(field[1][0], nodes.paragraph): - authors = self.authors_from_one_paragraph(field) - elif isinstance(field[1][0], nodes.bullet_list): - authors = self.authors_from_bullet_list(field) - else: - raise TransformError - else: - authors = self.authors_from_paragraphs(field) - authornodes = [nodes.author('', '', *author) - for author in authors if author] - if len(authornodes) >= 1: - docinfo.append(nodes.authors('', *authornodes)) - else: - raise TransformError - except TransformError: - field[-1] += self.document.reporter.warning( - 'Bibliographic field "%s" incompatible with extraction: ' - 'it must contain either a single paragraph (with authors ' - 'separated by one of "%s"), multiple paragraphs (one per ' - 'author), or a bullet list with one paragraph (one author) ' - 'per item.' - % (name, ''.join(self.language.author_separators)), - base_node=field) - raise - - def authors_from_one_paragraph(self, field): - """Return list of Text nodes for authornames. - - The set of separators is locale dependent (default: ";"- or ","). - """ - # @@ keep original formatting? (e.g. ``:authors: A. Test, *et-al*``) - text = ''.join(unicode(node) - for node in field[1].traverse(nodes.Text)) - if not text: - raise TransformError - for authorsep in self.language.author_separators: - # don't split at escaped `authorsep`: - pattern = '(?<!\x00)%s' % authorsep - authornames = re.split(pattern, text) - if len(authornames) > 1: - break - authornames = (name.strip() for name in authornames) - authors = [[nodes.Text(name, utils.unescape(name, True))] - for name in authornames if name] - return authors - - def authors_from_bullet_list(self, field): - authors = [] - for item in field[1][0]: - if isinstance(item, nodes.comment): - continue - if len(item) != 1 or not isinstance(item[0], nodes.paragraph): - raise TransformError - authors.append(item[0].children) - if not authors: - raise TransformError - return authors - - def authors_from_paragraphs(self, field): - for item in field[1]: - if not isinstance(item, (nodes.paragraph, nodes.comment)): - raise TransformError - authors = [item.children for item in field[1] - if not isinstance(item, nodes.comment)] - return authors diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/misc.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/misc.py deleted file mode 100644 index cd68ee1..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/misc.py +++ /dev/null @@ -1,144 +0,0 @@ -# $Id: misc.py 6314 2010-04-26 10:04:17Z milde $ -# Author: David Goodger <goodger@python.org> -# Copyright: This module has been placed in the public domain. - -""" -Miscellaneous transforms. -""" - -__docformat__ = 'reStructuredText' - -from docutils import nodes -from docutils.transforms import Transform, TransformError - - -class CallBack(Transform): - - """ - Inserts a callback into a document. The callback is called when the - transform is applied, which is determined by its priority. - - For use with `nodes.pending` elements. Requires a ``details['callback']`` - entry, a bound method or function which takes one parameter: the pending - node. Other data can be stored in the ``details`` attribute or in the - object hosting the callback method. - """ - - default_priority = 990 - - def apply(self): - pending = self.startnode - pending.details['callback'](pending) - pending.parent.remove(pending) - - -class ClassAttribute(Transform): - - """ - Move the "class" attribute specified in the "pending" node into the - immediately following non-comment element. - """ - - default_priority = 210 - - def apply(self): - pending = self.startnode - parent = pending.parent - child = pending - while parent: - # Check for appropriate following siblings: - for index in range(parent.index(child) + 1, len(parent)): - element = parent[index] - if (isinstance(element, nodes.Invisible) or - isinstance(element, nodes.system_message)): - continue - element['classes'] += pending.details['class'] - pending.parent.remove(pending) - return - else: - # At end of section or container; apply to sibling - child = parent - parent = parent.parent - error = self.document.reporter.error( - 'No suitable element following "%s" directive' - % pending.details['directive'], - nodes.literal_block(pending.rawsource, pending.rawsource), - line=pending.line) - pending.replace_self(error) - - -class Transitions(Transform): - - """ - Move transitions at the end of sections up the tree. Complain - on transitions after a title, at the beginning or end of the - document, and after another transition. - - For example, transform this:: - - <section> - ... - <transition> - <section> - ... - - into this:: - - <section> - ... - <transition> - <section> - ... - """ - - default_priority = 830 - - def apply(self): - for node in self.document.traverse(nodes.transition): - self.visit_transition(node) - - def visit_transition(self, node): - index = node.parent.index(node) - error = None - if (index == 0 or - isinstance(node.parent[0], nodes.title) and - (index == 1 or - isinstance(node.parent[1], nodes.subtitle) and - index == 2)): - assert (isinstance(node.parent, nodes.document) or - isinstance(node.parent, nodes.section)) - error = self.document.reporter.error( - 'Document or section may not begin with a transition.', - source=node.source, line=node.line) - elif isinstance(node.parent[index - 1], nodes.transition): - error = self.document.reporter.error( - 'At least one body element must separate transitions; ' - 'adjacent transitions are not allowed.', - source=node.source, line=node.line) - if error: - # Insert before node and update index. - node.parent.insert(index, error) - index += 1 - assert index < len(node.parent) - if index != len(node.parent) - 1: - # No need to move the node. - return - # Node behind which the transition is to be moved. - sibling = node - # While sibling is the last node of its parent. - while index == len(sibling.parent) - 1: - sibling = sibling.parent - # If sibling is the whole document (i.e. it has no parent). - if sibling.parent is None: - # Transition at the end of document. Do not move the - # transition up, and place an error behind. - error = self.document.reporter.error( - 'Document may not end with a transition.', - line=node.line) - node.parent.insert(node.parent.index(node) + 1, error) - return - index = sibling.parent.index(sibling) - # Remove the original transition node. - node.parent.remove(node) - # Insert the transition after the sibling. - sibling.parent.insert(index + 1, node) diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/parts.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/parts.py deleted file mode 100644 index 27efc8d..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/parts.py +++ /dev/null @@ -1,180 +0,0 @@ -# $Id: parts.py 8403 2019-10-11 10:09:53Z milde $ -# Authors: David Goodger <goodger@python.org>; Ueli Schlaepfer; Dmitry Jemerov -# Copyright: This module has been placed in the public domain. - -""" -Transforms related to document parts. -""" - -__docformat__ = 'reStructuredText' - - -import re -import sys -from docutils import nodes, utils -from docutils.transforms import TransformError, Transform - - -class SectNum(Transform): - - """ - Automatically assigns numbers to the titles of document sections. - - It is possible to limit the maximum section level for which the numbers - are added. For those sections that are auto-numbered, the "autonum" - attribute is set, informing the contents table generator that a different - form of the TOC should be used. - """ - - default_priority = 710 - """Should be applied before `Contents`.""" - - def apply(self): - self.maxdepth = self.startnode.details.get('depth', None) - self.startvalue = self.startnode.details.get('start', 1) - self.prefix = self.startnode.details.get('prefix', '') - self.suffix = self.startnode.details.get('suffix', '') - self.startnode.parent.remove(self.startnode) - if self.document.settings.sectnum_xform: - if self.maxdepth is None: - self.maxdepth = sys.maxsize - self.update_section_numbers(self.document) - else: # store details for eventual section numbering by the writer - self.document.settings.sectnum_depth = self.maxdepth - self.document.settings.sectnum_start = self.startvalue - self.document.settings.sectnum_prefix = self.prefix - self.document.settings.sectnum_suffix = self.suffix - - def update_section_numbers(self, node, prefix=(), depth=0): - depth += 1 - if prefix: - sectnum = 1 - else: - sectnum = self.startvalue - for child in node: - if isinstance(child, nodes.section): - numbers = prefix + (str(sectnum),) - title = child[0] - # Use   for spacing: - generated = nodes.generated( - '', (self.prefix + '.'.join(numbers) + self.suffix - + u'\u00a0' * 3), - classes=['sectnum']) - title.insert(0, generated) - title['auto'] = 1 - if depth < self.maxdepth: - self.update_section_numbers(child, numbers, depth) - sectnum += 1 - - -class Contents(Transform): - - """ - This transform generates a table of contents from the entire document tree - or from a single branch. It locates "section" elements and builds them - into a nested bullet list, which is placed within a "topic" created by the - contents directive. A title is either explicitly specified, taken from - the appropriate language module, or omitted (local table of contents). - The depth may be specified. Two-way references between the table of - contents and section titles are generated (requires Writer support). - - This transform requires a startnode, which contains generation - options and provides the location for the generated table of contents (the - startnode is replaced by the table of contents "topic"). - """ - - default_priority = 720 - - def apply(self): - try: # let the writer (or output software) build the contents list? - toc_by_writer = self.document.settings.use_latex_toc - except AttributeError: - toc_by_writer = False - details = self.startnode.details - if 'local' in details: - startnode = self.startnode.parent.parent - while not (isinstance(startnode, nodes.section) - or isinstance(startnode, nodes.document)): - # find the ToC root: a direct ancestor of startnode - startnode = startnode.parent - else: - startnode = self.document - self.toc_id = self.startnode.parent['ids'][0] - if 'backlinks' in details: - self.backlinks = details['backlinks'] - else: - self.backlinks = self.document.settings.toc_backlinks - if toc_by_writer: - # move customization settings to the parent node - self.startnode.parent.attributes.update(details) - self.startnode.parent.remove(self.startnode) - else: - contents = self.build_contents(startnode) - if len(contents): - self.startnode.replace_self(contents) - else: - self.startnode.parent.parent.remove(self.startnode.parent) - - def build_contents(self, node, level=0): - level += 1 - sections = [sect for sect in node if isinstance(sect, nodes.section)] - entries = [] - autonum = 0 - depth = self.startnode.details.get('depth', sys.maxsize) - for section in sections: - title = section[0] - auto = title.get('auto') # May be set by SectNum. - entrytext = self.copy_and_filter(title) - reference = nodes.reference('', '', refid=section['ids'][0], - *entrytext) - ref_id = self.document.set_id(reference, - suggested_prefix='toc-entry') - entry = nodes.paragraph('', '', reference) - item = nodes.list_item('', entry) - if ( self.backlinks in ('entry', 'top') - and title.next_node(nodes.reference) is None): - if self.backlinks == 'entry': - title['refid'] = ref_id - elif self.backlinks == 'top': - title['refid'] = self.toc_id - if level < depth: - subsects = self.build_contents(section, level) - item += subsects - entries.append(item) - if entries: - contents = nodes.bullet_list('', *entries) - if auto: - contents['classes'].append('auto-toc') - return contents - else: - return [] - - def copy_and_filter(self, node): - """Return a copy of a title, with references, images, etc. removed.""" - visitor = ContentsFilter(self.document) - node.walkabout(visitor) - return visitor.get_entry_text() - - -class ContentsFilter(nodes.TreeCopyVisitor): - - def get_entry_text(self): - return self.get_tree_copy().children - - def visit_citation_reference(self, node): - raise nodes.SkipNode - - def visit_footnote_reference(self, node): - raise nodes.SkipNode - - def visit_image(self, node): - if node.hasattr('alt'): - self.parent.append(nodes.Text(node['alt'])) - raise nodes.SkipNode - - def ignore_node_but_process_children(self, node): - raise nodes.SkipDeparture - - visit_problematic = ignore_node_but_process_children - visit_reference = ignore_node_but_process_children - visit_target = ignore_node_but_process_children diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/peps.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/peps.py deleted file mode 100644 index 94b47c1..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/peps.py +++ /dev/null @@ -1,305 +0,0 @@ -# $Id: peps.py 7995 2016-12-10 17:50:59Z milde $ -# Author: David Goodger <goodger@python.org> -# Copyright: This module has been placed in the public domain. - -""" -Transforms for PEP processing. - -- `Headers`: Used to transform a PEP's initial RFC-2822 header. It remains a - field list, but some entries get processed. -- `Contents`: Auto-inserts a table of contents. -- `PEPZero`: Special processing for PEP 0. -""" - -__docformat__ = 'reStructuredText' - -import sys -import os -import re -import time -from docutils import nodes, utils, languages -from docutils import ApplicationError, DataError -from docutils.transforms import Transform, TransformError -from docutils.transforms import parts, references, misc - - -class Headers(Transform): - - """ - Process fields in a PEP's initial RFC-2822 header. - """ - - default_priority = 360 - - pep_url = 'pep-%04d' - pep_cvs_url = ('http://hg.python.org' - '/peps/file/default/pep-%04d.txt') - rcs_keyword_substitutions = ( - (re.compile(r'\$' r'RCSfile: (.+),v \$$', re.IGNORECASE), r'\1'), - (re.compile(r'\$[a-zA-Z]+: (.+) \$$'), r'\1'),) - - def apply(self): - if not len(self.document): - # @@@ replace these DataErrors with proper system messages - raise DataError('Document tree is empty.') - header = self.document[0] - if not isinstance(header, nodes.field_list) or \ - 'rfc2822' not in header['classes']: - raise DataError('Document does not begin with an RFC-2822 ' - 'header; it is not a PEP.') - pep = None - for field in header: - if field[0].astext().lower() == 'pep': # should be the first field - value = field[1].astext() - try: - pep = int(value) - cvs_url = self.pep_cvs_url % pep - except ValueError: - pep = value - cvs_url = None - msg = self.document.reporter.warning( - '"PEP" header must contain an integer; "%s" is an ' - 'invalid value.' % pep, base_node=field) - msgid = self.document.set_id(msg) - prb = nodes.problematic(value, value or '(none)', - refid=msgid) - prbid = self.document.set_id(prb) - msg.add_backref(prbid) - if len(field[1]): - field[1][0][:] = [prb] - else: - field[1] += nodes.paragraph('', '', prb) - break - if pep is None: - raise DataError('Document does not contain an RFC-2822 "PEP" ' - 'header.') - if pep == 0: - # Special processing for PEP 0. - pending = nodes.pending(PEPZero) - self.document.insert(1, pending) - self.document.note_pending(pending) - if len(header) < 2 or header[1][0].astext().lower() != 'title': - raise DataError('No title!') - for field in header: - name = field[0].astext().lower() - body = field[1] - if len(body) > 1: - raise DataError('PEP header field body contains multiple ' - 'elements:\n%s' % field.pformat(level=1)) - elif len(body) == 1: - if not isinstance(body[0], nodes.paragraph): - raise DataError('PEP header field body may only contain ' - 'a single paragraph:\n%s' - % field.pformat(level=1)) - elif name == 'last-modified': - date = time.strftime( - '%d-%b-%Y', - time.localtime(os.stat(self.document['source'])[8])) - if cvs_url: - body += nodes.paragraph( - '', '', nodes.reference('', date, refuri=cvs_url)) - else: - # empty - continue - para = body[0] - if name == 'author': - for node in para: - if isinstance(node, nodes.reference): - node.replace_self(mask_email(node)) - elif name == 'discussions-to': - for node in para: - if isinstance(node, nodes.reference): - node.replace_self(mask_email(node, pep)) - elif name in ('replaces', 'replaced-by', 'requires'): - newbody = [] - space = nodes.Text(' ') - for refpep in re.split(r',?\s+', body.astext()): - pepno = int(refpep) - newbody.append(nodes.reference( - refpep, refpep, - refuri=(self.document.settings.pep_base_url - + self.pep_url % pepno))) - newbody.append(space) - para[:] = newbody[:-1] # drop trailing space - elif name == 'last-modified': - utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) - if cvs_url: - date = para.astext() - para[:] = [nodes.reference('', date, refuri=cvs_url)] - elif name == 'content-type': - pep_type = para.astext() - uri = self.document.settings.pep_base_url + self.pep_url % 12 - para[:] = [nodes.reference('', pep_type, refuri=uri)] - elif name == 'version' and len(body): - utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) - - -class Contents(Transform): - - """ - Insert an empty table of contents topic and a transform placeholder into - the document after the RFC 2822 header. - """ - - default_priority = 380 - - def apply(self): - language = languages.get_language(self.document.settings.language_code, - self.document.reporter) - name = language.labels['contents'] - title = nodes.title('', name) - topic = nodes.topic('', title, classes=['contents']) - name = nodes.fully_normalize_name(name) - if not self.document.has_name(name): - topic['names'].append(name) - self.document.note_implicit_target(topic) - pending = nodes.pending(parts.Contents) - topic += pending - self.document.insert(1, topic) - self.document.note_pending(pending) - - -class TargetNotes(Transform): - - """ - Locate the "References" section, insert a placeholder for an external - target footnote insertion transform at the end, and schedule the - transform to run immediately. - """ - - default_priority = 520 - - def apply(self): - doc = self.document - i = len(doc) - 1 - refsect = copyright = None - while i >= 0 and isinstance(doc[i], nodes.section): - title_words = doc[i][0].astext().lower().split() - if 'references' in title_words: - refsect = doc[i] - break - elif 'copyright' in title_words: - copyright = i - i -= 1 - if not refsect: - refsect = nodes.section() - refsect += nodes.title('', 'References') - doc.set_id(refsect) - if copyright: - # Put the new "References" section before "Copyright": - doc.insert(copyright, refsect) - else: - # Put the new "References" section at end of doc: - doc.append(refsect) - pending = nodes.pending(references.TargetNotes) - refsect.append(pending) - self.document.note_pending(pending, 0) - pending = nodes.pending(misc.CallBack, - details={'callback': self.cleanup_callback}) - refsect.append(pending) - self.document.note_pending(pending, 1) - - def cleanup_callback(self, pending): - """ - Remove an empty "References" section. - - Called after the `references.TargetNotes` transform is complete. - """ - if len(pending.parent) == 2: # <title> and <pending> - pending.parent.parent.remove(pending.parent) - - -class PEPZero(Transform): - - """ - Special processing for PEP 0. - """ - - default_priority =760 - - def apply(self): - visitor = PEPZeroSpecial(self.document) - self.document.walk(visitor) - self.startnode.parent.remove(self.startnode) - - -class PEPZeroSpecial(nodes.SparseNodeVisitor): - - """ - Perform the special processing needed by PEP 0: - - - Mask email addresses. - - - Link PEP numbers in the second column of 4-column tables to the PEPs - themselves. - """ - - pep_url = Headers.pep_url - - def unknown_visit(self, node): - pass - - def visit_reference(self, node): - node.replace_self(mask_email(node)) - - def visit_field_list(self, node): - if 'rfc2822' in node['classes']: - raise nodes.SkipNode - - def visit_tgroup(self, node): - self.pep_table = node['cols'] == 4 - self.entry = 0 - - def visit_colspec(self, node): - self.entry += 1 - if self.pep_table and self.entry == 2: - node['classes'].append('num') - - def visit_row(self, node): - self.entry = 0 - - def visit_entry(self, node): - self.entry += 1 - if self.pep_table and self.entry == 2 and len(node) == 1: - node['classes'].append('num') - p = node[0] - if isinstance(p, nodes.paragraph) and len(p) == 1: - text = p.astext() - try: - pep = int(text) - ref = (self.document.settings.pep_base_url - + self.pep_url % pep) - p[0] = nodes.reference(text, text, refuri=ref) - except ValueError: - pass - - -non_masked_addresses = ('peps@python.org', - 'python-list@python.org', - 'python-dev@python.org') - -def mask_email(ref, pepno=None): - """ - Mask the email address in `ref` and return a replacement node. - - `ref` is returned unchanged if it contains no email address. - - For email addresses such as "user@host", mask the address as "user at - host" (text) to thwart simple email address harvesters (except for those - listed in `non_masked_addresses`). If a PEP number (`pepno`) is given, - return a reference including a default email subject. - """ - if ref.hasattr('refuri') and ref['refuri'].startswith('mailto:'): - if ref['refuri'][8:] in non_masked_addresses: - replacement = ref[0] - else: - replacement_text = ref.astext().replace('@', ' at ') - replacement = nodes.raw('', replacement_text, format='html') - if pepno is None: - return replacement - else: - ref['refuri'] += '?subject=PEP%%20%s' % pepno - ref[:] = [replacement] - return ref - else: - return ref diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/references.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/references.py deleted file mode 100644 index e6f6149..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/references.py +++ /dev/null @@ -1,911 +0,0 @@ -# $Id: references.py 8387 2019-09-06 13:16:34Z milde $ -# Author: David Goodger <goodger@python.org> -# Copyright: This module has been placed in the public domain. - -""" -Transforms for resolving references. -""" - -__docformat__ = 'reStructuredText' - -import sys -import re -from docutils import nodes, utils -from docutils.transforms import TransformError, Transform - - -class PropagateTargets(Transform): - - """ - Propagate empty internal targets to the next element. - - Given the following nodes:: - - <target ids="internal1" names="internal1"> - <target anonymous="1" ids="id1"> - <target ids="internal2" names="internal2"> - <paragraph> - This is a test. - - PropagateTargets propagates the ids and names of the internal - targets preceding the paragraph to the paragraph itself:: - - <target refid="internal1"> - <target anonymous="1" refid="id1"> - <target refid="internal2"> - <paragraph ids="internal2 id1 internal1" names="internal2 internal1"> - This is a test. - """ - - default_priority = 260 - - def apply(self): - for target in self.document.traverse(nodes.target): - # Only block-level targets without reference (like ".. target:"): - if (isinstance(target.parent, nodes.TextElement) or - (target.hasattr('refid') or target.hasattr('refuri') or - target.hasattr('refname'))): - continue - assert len(target) == 0, 'error: block-level target has children' - next_node = target.next_node(ascend=True) - # Do not move names and ids into Invisibles (we'd lose the - # attributes) or different Targetables (e.g. footnotes). - if (next_node is not None and - ((not isinstance(next_node, nodes.Invisible) and - not isinstance(next_node, nodes.Targetable)) or - isinstance(next_node, nodes.target))): - next_node['ids'].extend(target['ids']) - next_node['names'].extend(target['names']) - # Set defaults for next_node.expect_referenced_by_name/id. - if not hasattr(next_node, 'expect_referenced_by_name'): - next_node.expect_referenced_by_name = {} - if not hasattr(next_node, 'expect_referenced_by_id'): - next_node.expect_referenced_by_id = {} - for id in target['ids']: - # Update IDs to node mapping. - self.document.ids[id] = next_node - # If next_node is referenced by id ``id``, this - # target shall be marked as referenced. - next_node.expect_referenced_by_id[id] = target - for name in target['names']: - next_node.expect_referenced_by_name[name] = target - # If there are any expect_referenced_by_... attributes - # in target set, copy them to next_node. - next_node.expect_referenced_by_name.update( - getattr(target, 'expect_referenced_by_name', {})) - next_node.expect_referenced_by_id.update( - getattr(target, 'expect_referenced_by_id', {})) - # Set refid to point to the first former ID of target - # which is now an ID of next_node. - target['refid'] = target['ids'][0] - # Clear ids and names; they have been moved to - # next_node. - target['ids'] = [] - target['names'] = [] - self.document.note_refid(target) - - -class AnonymousHyperlinks(Transform): - - """ - Link anonymous references to targets. Given:: - - <paragraph> - <reference anonymous="1"> - internal - <reference anonymous="1"> - external - <target anonymous="1" ids="id1"> - <target anonymous="1" ids="id2" refuri="http://external"> - - Corresponding references are linked via "refid" or resolved via "refuri":: - - <paragraph> - <reference anonymous="1" refid="id1"> - text - <reference anonymous="1" refuri="http://external"> - external - <target anonymous="1" ids="id1"> - <target anonymous="1" ids="id2" refuri="http://external"> - """ - - default_priority = 440 - - def apply(self): - anonymous_refs = [] - anonymous_targets = [] - for node in self.document.traverse(nodes.reference): - if node.get('anonymous'): - anonymous_refs.append(node) - for node in self.document.traverse(nodes.target): - if node.get('anonymous'): - anonymous_targets.append(node) - if len(anonymous_refs) \ - != len(anonymous_targets): - msg = self.document.reporter.error( - 'Anonymous hyperlink mismatch: %s references but %s ' - 'targets.\nSee "backrefs" attribute for IDs.' - % (len(anonymous_refs), len(anonymous_targets))) - msgid = self.document.set_id(msg) - for ref in anonymous_refs: - prb = nodes.problematic( - ref.rawsource, ref.rawsource, refid=msgid) - prbid = self.document.set_id(prb) - msg.add_backref(prbid) - ref.replace_self(prb) - return - for ref, target in zip(anonymous_refs, anonymous_targets): - target.referenced = 1 - while True: - if target.hasattr('refuri'): - ref['refuri'] = target['refuri'] - ref.resolved = 1 - break - else: - if not target['ids']: - # Propagated target. - target = self.document.ids[target['refid']] - continue - ref['refid'] = target['ids'][0] - self.document.note_refid(ref) - break - - -class IndirectHyperlinks(Transform): - - """ - a) Indirect external references:: - - <paragraph> - <reference refname="indirect external"> - indirect external - <target id="id1" name="direct external" - refuri="http://indirect"> - <target id="id2" name="indirect external" - refname="direct external"> - - The "refuri" attribute is migrated back to all indirect targets - from the final direct target (i.e. a target not referring to - another indirect target):: - - <paragraph> - <reference refname="indirect external"> - indirect external - <target id="id1" name="direct external" - refuri="http://indirect"> - <target id="id2" name="indirect external" - refuri="http://indirect"> - - Once the attribute is migrated, the preexisting "refname" attribute - is dropped. - - b) Indirect internal references:: - - <target id="id1" name="final target"> - <paragraph> - <reference refname="indirect internal"> - indirect internal - <target id="id2" name="indirect internal 2" - refname="final target"> - <target id="id3" name="indirect internal" - refname="indirect internal 2"> - - Targets which indirectly refer to an internal target become one-hop - indirect (their "refid" attributes are directly set to the internal - target's "id"). References which indirectly refer to an internal - target become direct internal references:: - - <target id="id1" name="final target"> - <paragraph> - <reference refid="id1"> - indirect internal - <target id="id2" name="indirect internal 2" refid="id1"> - <target id="id3" name="indirect internal" refid="id1"> - """ - - default_priority = 460 - - def apply(self): - for target in self.document.indirect_targets: - if not target.resolved: - self.resolve_indirect_target(target) - self.resolve_indirect_references(target) - - def resolve_indirect_target(self, target): - refname = target.get('refname') - if refname is None: - reftarget_id = target['refid'] - else: - reftarget_id = self.document.nameids.get(refname) - if not reftarget_id: - # Check the unknown_reference_resolvers - for resolver_function in \ - self.document.transformer.unknown_reference_resolvers: - if resolver_function(target): - break - else: - self.nonexistent_indirect_target(target) - return - reftarget = self.document.ids[reftarget_id] - reftarget.note_referenced_by(id=reftarget_id) - if isinstance(reftarget, nodes.target) \ - and not reftarget.resolved and reftarget.hasattr('refname'): - if hasattr(target, 'multiply_indirect'): - #and target.multiply_indirect): - #del target.multiply_indirect - self.circular_indirect_reference(target) - return - target.multiply_indirect = 1 - self.resolve_indirect_target(reftarget) # multiply indirect - del target.multiply_indirect - if reftarget.hasattr('refuri'): - target['refuri'] = reftarget['refuri'] - if 'refid' in target: - del target['refid'] - elif reftarget.hasattr('refid'): - target['refid'] = reftarget['refid'] - self.document.note_refid(target) - else: - if reftarget['ids']: - target['refid'] = reftarget_id - self.document.note_refid(target) - else: - self.nonexistent_indirect_target(target) - return - if refname is not None: - del target['refname'] - target.resolved = 1 - - def nonexistent_indirect_target(self, target): - if target['refname'] in self.document.nameids: - self.indirect_target_error(target, 'which is a duplicate, and ' - 'cannot be used as a unique reference') - else: - self.indirect_target_error(target, 'which does not exist') - - def circular_indirect_reference(self, target): - self.indirect_target_error(target, 'forming a circular reference') - - def indirect_target_error(self, target, explanation): - naming = '' - reflist = [] - if target['names']: - naming = '"%s" ' % target['names'][0] - for name in target['names']: - reflist.extend(self.document.refnames.get(name, [])) - for id in target['ids']: - reflist.extend(self.document.refids.get(id, [])) - if target['ids']: - naming += '(id="%s")' % target['ids'][0] - msg = self.document.reporter.error( - 'Indirect hyperlink target %s refers to target "%s", %s.' - % (naming, target['refname'], explanation), base_node=target) - msgid = self.document.set_id(msg) - for ref in utils.uniq(reflist): - prb = nodes.problematic( - ref.rawsource, ref.rawsource, refid=msgid) - prbid = self.document.set_id(prb) - msg.add_backref(prbid) - ref.replace_self(prb) - target.resolved = 1 - - def resolve_indirect_references(self, target): - if target.hasattr('refid'): - attname = 'refid' - call_method = self.document.note_refid - elif target.hasattr('refuri'): - attname = 'refuri' - call_method = None - else: - return - attval = target[attname] - for name in target['names']: - reflist = self.document.refnames.get(name, []) - if reflist: - target.note_referenced_by(name=name) - for ref in reflist: - if ref.resolved: - continue - del ref['refname'] - ref[attname] = attval - if call_method: - call_method(ref) - ref.resolved = 1 - if isinstance(ref, nodes.target): - self.resolve_indirect_references(ref) - for id in target['ids']: - reflist = self.document.refids.get(id, []) - if reflist: - target.note_referenced_by(id=id) - for ref in reflist: - if ref.resolved: - continue - del ref['refid'] - ref[attname] = attval - if call_method: - call_method(ref) - ref.resolved = 1 - if isinstance(ref, nodes.target): - self.resolve_indirect_references(ref) - - -class ExternalTargets(Transform): - - """ - Given:: - - <paragraph> - <reference refname="direct external"> - direct external - <target id="id1" name="direct external" refuri="http://direct"> - - The "refname" attribute is replaced by the direct "refuri" attribute:: - - <paragraph> - <reference refuri="http://direct"> - direct external - <target id="id1" name="direct external" refuri="http://direct"> - """ - - default_priority = 640 - - def apply(self): - for target in self.document.traverse(nodes.target): - if target.hasattr('refuri'): - refuri = target['refuri'] - for name in target['names']: - reflist = self.document.refnames.get(name, []) - if reflist: - target.note_referenced_by(name=name) - for ref in reflist: - if ref.resolved: - continue - del ref['refname'] - ref['refuri'] = refuri - ref.resolved = 1 - - -class InternalTargets(Transform): - - default_priority = 660 - - def apply(self): - for target in self.document.traverse(nodes.target): - if not target.hasattr('refuri') and not target.hasattr('refid'): - self.resolve_reference_ids(target) - - def resolve_reference_ids(self, target): - """ - Given:: - - <paragraph> - <reference refname="direct internal"> - direct internal - <target id="id1" name="direct internal"> - - The "refname" attribute is replaced by "refid" linking to the target's - "id":: - - <paragraph> - <reference refid="id1"> - direct internal - <target id="id1" name="direct internal"> - """ - for name in target['names']: - refid = self.document.nameids.get(name) - reflist = self.document.refnames.get(name, []) - if reflist: - target.note_referenced_by(name=name) - for ref in reflist: - if ref.resolved: - continue - if refid: - del ref['refname'] - ref['refid'] = refid - ref.resolved = 1 - - -class Footnotes(Transform): - - """ - Assign numbers to autonumbered footnotes, and resolve links to footnotes, - citations, and their references. - - Given the following ``document`` as input:: - - <document> - <paragraph> - A labeled autonumbered footnote referece: - <footnote_reference auto="1" id="id1" refname="footnote"> - <paragraph> - An unlabeled autonumbered footnote referece: - <footnote_reference auto="1" id="id2"> - <footnote auto="1" id="id3"> - <paragraph> - Unlabeled autonumbered footnote. - <footnote auto="1" id="footnote" name="footnote"> - <paragraph> - Labeled autonumbered footnote. - - Auto-numbered footnotes have attribute ``auto="1"`` and no label. - Auto-numbered footnote_references have no reference text (they're - empty elements). When resolving the numbering, a ``label`` element - is added to the beginning of the ``footnote``, and reference text - to the ``footnote_reference``. - - The transformed result will be:: - - <document> - <paragraph> - A labeled autonumbered footnote referece: - <footnote_reference auto="1" id="id1" refid="footnote"> - 2 - <paragraph> - An unlabeled autonumbered footnote referece: - <footnote_reference auto="1" id="id2" refid="id3"> - 1 - <footnote auto="1" id="id3" backrefs="id2"> - <label> - 1 - <paragraph> - Unlabeled autonumbered footnote. - <footnote auto="1" id="footnote" name="footnote" backrefs="id1"> - <label> - 2 - <paragraph> - Labeled autonumbered footnote. - - Note that the footnotes are not in the same order as the references. - - The labels and reference text are added to the auto-numbered ``footnote`` - and ``footnote_reference`` elements. Footnote elements are backlinked to - their references via "refids" attributes. References are assigned "id" - and "refid" attributes. - - After adding labels and reference text, the "auto" attributes can be - ignored. - """ - - default_priority = 620 - - autofootnote_labels = None - """Keep track of unlabeled autonumbered footnotes.""" - - symbols = [ - # Entries 1-4 and 6 below are from section 12.51 of - # The Chicago Manual of Style, 14th edition. - '*', # asterisk/star - u'\u2020', # dagger † - u'\u2021', # double dagger ‡ - u'\u00A7', # section mark § - u'\u00B6', # paragraph mark (pilcrow) ¶ - # (parallels ['||'] in CMoS) - '#', # number sign - # The entries below were chosen arbitrarily. - u'\u2660', # spade suit ♠ - u'\u2665', # heart suit ♥ - u'\u2666', # diamond suit ♦ - u'\u2663', # club suit ♣ - ] - - def apply(self): - self.autofootnote_labels = [] - startnum = self.document.autofootnote_start - self.document.autofootnote_start = self.number_footnotes(startnum) - self.number_footnote_references(startnum) - self.symbolize_footnotes() - self.resolve_footnotes_and_citations() - - def number_footnotes(self, startnum): - """ - Assign numbers to autonumbered footnotes. - - For labeled autonumbered footnotes, copy the number over to - corresponding footnote references. - """ - for footnote in self.document.autofootnotes: - while True: - label = str(startnum) - startnum += 1 - if label not in self.document.nameids: - break - footnote.insert(0, nodes.label('', label)) - for name in footnote['names']: - for ref in self.document.footnote_refs.get(name, []): - ref += nodes.Text(label) - ref.delattr('refname') - assert len(footnote['ids']) == len(ref['ids']) == 1 - ref['refid'] = footnote['ids'][0] - footnote.add_backref(ref['ids'][0]) - self.document.note_refid(ref) - ref.resolved = 1 - if not footnote['names'] and not footnote['dupnames']: - footnote['names'].append(label) - self.document.note_explicit_target(footnote, footnote) - self.autofootnote_labels.append(label) - return startnum - - def number_footnote_references(self, startnum): - """Assign numbers to autonumbered footnote references.""" - i = 0 - for ref in self.document.autofootnote_refs: - if ref.resolved or ref.hasattr('refid'): - continue - try: - label = self.autofootnote_labels[i] - except IndexError: - msg = self.document.reporter.error( - 'Too many autonumbered footnote references: only %s ' - 'corresponding footnotes available.' - % len(self.autofootnote_labels), base_node=ref) - msgid = self.document.set_id(msg) - for ref in self.document.autofootnote_refs[i:]: - if ref.resolved or ref.hasattr('refname'): - continue - prb = nodes.problematic( - ref.rawsource, ref.rawsource, refid=msgid) - prbid = self.document.set_id(prb) - msg.add_backref(prbid) - ref.replace_self(prb) - break - ref += nodes.Text(label) - id = self.document.nameids[label] - footnote = self.document.ids[id] - ref['refid'] = id - self.document.note_refid(ref) - assert len(ref['ids']) == 1 - footnote.add_backref(ref['ids'][0]) - ref.resolved = 1 - i += 1 - - def symbolize_footnotes(self): - """Add symbols indexes to "[*]"-style footnotes and references.""" - labels = [] - for footnote in self.document.symbol_footnotes: - reps, index = divmod(self.document.symbol_footnote_start, - len(self.symbols)) - labeltext = self.symbols[index] * (reps + 1) - labels.append(labeltext) - footnote.insert(0, nodes.label('', labeltext)) - self.document.symbol_footnote_start += 1 - self.document.set_id(footnote) - i = 0 - for ref in self.document.symbol_footnote_refs: - try: - ref += nodes.Text(labels[i]) - except IndexError: - msg = self.document.reporter.error( - 'Too many symbol footnote references: only %s ' - 'corresponding footnotes available.' % len(labels), - base_node=ref) - msgid = self.document.set_id(msg) - for ref in self.document.symbol_footnote_refs[i:]: - if ref.resolved or ref.hasattr('refid'): - continue - prb = nodes.problematic( - ref.rawsource, ref.rawsource, refid=msgid) - prbid = self.document.set_id(prb) - msg.add_backref(prbid) - ref.replace_self(prb) - break - footnote = self.document.symbol_footnotes[i] - assert len(footnote['ids']) == 1 - ref['refid'] = footnote['ids'][0] - self.document.note_refid(ref) - footnote.add_backref(ref['ids'][0]) - i += 1 - - def resolve_footnotes_and_citations(self): - """ - Link manually-labeled footnotes and citations to/from their - references. - """ - for footnote in self.document.footnotes: - for label in footnote['names']: - if label in self.document.footnote_refs: - reflist = self.document.footnote_refs[label] - self.resolve_references(footnote, reflist) - for citation in self.document.citations: - for label in citation['names']: - if label in self.document.citation_refs: - reflist = self.document.citation_refs[label] - self.resolve_references(citation, reflist) - - def resolve_references(self, note, reflist): - assert len(note['ids']) == 1 - id = note['ids'][0] - for ref in reflist: - if ref.resolved: - continue - ref.delattr('refname') - ref['refid'] = id - assert len(ref['ids']) == 1 - note.add_backref(ref['ids'][0]) - ref.resolved = 1 - note.resolved = 1 - - -class CircularSubstitutionDefinitionError(Exception): pass - - -class Substitutions(Transform): - - """ - Given the following ``document`` as input:: - - <document> - <paragraph> - The - <substitution_reference refname="biohazard"> - biohazard - symbol is deservedly scary-looking. - <substitution_definition name="biohazard"> - <image alt="biohazard" uri="biohazard.png"> - - The ``substitution_reference`` will simply be replaced by the - contents of the corresponding ``substitution_definition``. - - The transformed result will be:: - - <document> - <paragraph> - The - <image alt="biohazard" uri="biohazard.png"> - symbol is deservedly scary-looking. - <substitution_definition name="biohazard"> - <image alt="biohazard" uri="biohazard.png"> - """ - - default_priority = 220 - """The Substitutions transform has to be applied very early, before - `docutils.tranforms.frontmatter.DocTitle` and others.""" - - def apply(self): - defs = self.document.substitution_defs - normed = self.document.substitution_names - subreflist = list(self.document.traverse(nodes.substitution_reference)) - nested = {} - for ref in subreflist: - refname = ref['refname'] - key = None - if refname in defs: - key = refname - else: - normed_name = refname.lower() - if normed_name in normed: - key = normed[normed_name] - if key is None: - msg = self.document.reporter.error( - 'Undefined substitution referenced: "%s".' - % refname, base_node=ref) - msgid = self.document.set_id(msg) - prb = nodes.problematic( - ref.rawsource, ref.rawsource, refid=msgid) - prbid = self.document.set_id(prb) - msg.add_backref(prbid) - ref.replace_self(prb) - else: - subdef = defs[key] - parent = ref.parent - index = parent.index(ref) - if ('ltrim' in subdef.attributes - or 'trim' in subdef.attributes): - if index > 0 and isinstance(parent[index - 1], - nodes.Text): - parent[index - 1] = parent[index - 1].rstrip() - if ('rtrim' in subdef.attributes - or 'trim' in subdef.attributes): - if (len(parent) > index + 1 - and isinstance(parent[index + 1], nodes.Text)): - parent[index + 1] = parent[index + 1].lstrip() - subdef_copy = subdef.deepcopy() - try: - # Take care of nested substitution references: - for nested_ref in subdef_copy.traverse( - nodes.substitution_reference): - nested_name = normed[nested_ref['refname'].lower()] - if nested_name in nested.setdefault(nested_name, []): - raise CircularSubstitutionDefinitionError - else: - nested[nested_name].append(key) - nested_ref['ref-origin'] = ref - subreflist.append(nested_ref) - except CircularSubstitutionDefinitionError: - parent = ref.parent - if isinstance(parent, nodes.substitution_definition): - msg = self.document.reporter.error( - 'Circular substitution definition detected:', - nodes.literal_block(parent.rawsource, - parent.rawsource), - line=parent.line, base_node=parent) - parent.replace_self(msg) - else: - # find original ref substitution which cased this error - ref_origin = ref - while ref_origin.hasattr('ref-origin'): - ref_origin = ref_origin['ref-origin'] - msg = self.document.reporter.error( - 'Circular substitution definition referenced: ' - '"%s".' % refname, base_node=ref_origin) - msgid = self.document.set_id(msg) - prb = nodes.problematic( - ref.rawsource, ref.rawsource, refid=msgid) - prbid = self.document.set_id(prb) - msg.add_backref(prbid) - ref.replace_self(prb) - else: - ref.replace_self(subdef_copy.children) - # register refname of the replacment node(s) - # (needed for resolution of references) - for node in subdef_copy.children: - if isinstance(node, nodes.Referential): - # HACK: verify refname attribute exists. - # Test with docs/dev/todo.txt, see. |donate| - if 'refname' in node: - self.document.note_refname(node) - - -class TargetNotes(Transform): - - """ - Creates a footnote for each external target in the text, and corresponding - footnote references after each reference. - """ - - default_priority = 540 - """The TargetNotes transform has to be applied after `IndirectHyperlinks` - but before `Footnotes`.""" - - - def __init__(self, document, startnode): - Transform.__init__(self, document, startnode=startnode) - - self.classes = startnode.details.get('class', []) - - def apply(self): - notes = {} - nodelist = [] - for target in self.document.traverse(nodes.target): - # Only external targets. - if not target.hasattr('refuri'): - continue - names = target['names'] - refs = [] - for name in names: - refs.extend(self.document.refnames.get(name, [])) - if not refs: - continue - footnote = self.make_target_footnote(target['refuri'], refs, - notes) - if target['refuri'] not in notes: - notes[target['refuri']] = footnote - nodelist.append(footnote) - # Take care of anonymous references. - for ref in self.document.traverse(nodes.reference): - if not ref.get('anonymous'): - continue - if ref.hasattr('refuri'): - footnote = self.make_target_footnote(ref['refuri'], [ref], - notes) - if ref['refuri'] not in notes: - notes[ref['refuri']] = footnote - nodelist.append(footnote) - self.startnode.replace_self(nodelist) - - def make_target_footnote(self, refuri, refs, notes): - if refuri in notes: # duplicate? - footnote = notes[refuri] - assert len(footnote['names']) == 1 - footnote_name = footnote['names'][0] - else: # original - footnote = nodes.footnote() - footnote_id = self.document.set_id(footnote) - # Use uppercase letters and a colon; they can't be - # produced inside names by the parser. - footnote_name = 'TARGET_NOTE: ' + footnote_id - footnote['auto'] = 1 - footnote['names'] = [footnote_name] - footnote_paragraph = nodes.paragraph() - footnote_paragraph += nodes.reference('', refuri, refuri=refuri) - footnote += footnote_paragraph - self.document.note_autofootnote(footnote) - self.document.note_explicit_target(footnote, footnote) - for ref in refs: - if isinstance(ref, nodes.target): - continue - refnode = nodes.footnote_reference(refname=footnote_name, auto=1) - refnode['classes'] += self.classes - self.document.note_autofootnote_ref(refnode) - self.document.note_footnote_ref(refnode) - index = ref.parent.index(ref) + 1 - reflist = [refnode] - if not utils.get_trim_footnote_ref_space(self.document.settings): - if self.classes: - reflist.insert(0, nodes.inline(text=' ', Classes=self.classes)) - else: - reflist.insert(0, nodes.Text(' ')) - ref.parent.insert(index, reflist) - return footnote - - -class DanglingReferences(Transform): - - """ - Check for dangling references (incl. footnote & citation) and for - unreferenced targets. - """ - - default_priority = 850 - - def apply(self): - visitor = DanglingReferencesVisitor( - self.document, - self.document.transformer.unknown_reference_resolvers) - self.document.walk(visitor) - # *After* resolving all references, check for unreferenced - # targets: - for target in self.document.traverse(nodes.target): - if not target.referenced: - if target.get('anonymous'): - # If we have unreferenced anonymous targets, there - # is already an error message about anonymous - # hyperlink mismatch; no need to generate another - # message. - continue - if target['names']: - naming = target['names'][0] - elif target['ids']: - naming = target['ids'][0] - else: - # Hack: Propagated targets always have their refid - # attribute set. - naming = target['refid'] - self.document.reporter.info( - 'Hyperlink target "%s" is not referenced.' - % naming, base_node=target) - - -class DanglingReferencesVisitor(nodes.SparseNodeVisitor): - - def __init__(self, document, unknown_reference_resolvers): - nodes.SparseNodeVisitor.__init__(self, document) - self.document = document - self.unknown_reference_resolvers = unknown_reference_resolvers - - def unknown_visit(self, node): - pass - - def visit_reference(self, node): - if node.resolved or not node.hasattr('refname'): - return - refname = node['refname'] - id = self.document.nameids.get(refname) - if id is None: - for resolver_function in self.unknown_reference_resolvers: - if resolver_function(node): - break - else: - if refname in self.document.nameids: - msg = self.document.reporter.error( - 'Duplicate target name, cannot be used as a unique ' - 'reference: "%s".' % (node['refname']), base_node=node) - else: - msg = self.document.reporter.error( - 'Unknown target name: "%s".' % (node['refname']), - base_node=node) - msgid = self.document.set_id(msg) - prb = nodes.problematic( - node.rawsource, node.rawsource, refid=msgid) - try: - prbid = node['ids'][0] - except IndexError: - prbid = self.document.set_id(prb) - msg.add_backref(prbid) - node.replace_self(prb) - else: - del node['refname'] - node['refid'] = id - self.document.ids[id].note_referenced_by(id=id) - node.resolved = 1 - - visit_footnote_reference = visit_citation_reference = visit_reference diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/universal.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/universal.py deleted file mode 100644 index d8a4749..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/universal.py +++ /dev/null @@ -1,320 +0,0 @@ -# $Id: universal.py 8393 2019-09-18 10:13:00Z milde $ -# -*- coding: utf-8 -*- -# Authors: David Goodger <goodger@python.org>; Ueli Schlaepfer; Günter Milde -# Maintainer: docutils-develop@lists.sourceforge.net -# Copyright: This module has been placed in the public domain. - -""" -Transforms needed by most or all documents: - -- `Decorations`: Generate a document's header & footer. -- `Messages`: Placement of system messages stored in - `nodes.document.transform_messages`. -- `TestMessages`: Like `Messages`, used on test runs. -- `FinalReferences`: Resolve remaining references. -""" - -__docformat__ = 'reStructuredText' - -import re -import sys -import time -from docutils import nodes, utils -from docutils.transforms import TransformError, Transform -from docutils.utils import smartquotes - - -if sys.version_info >= (3, 0): - unicode = str # noqa - - -class Decorations(Transform): - - """ - Populate a document's decoration element (header, footer). - """ - - default_priority = 820 - - def apply(self): - header_nodes = self.generate_header() - if header_nodes: - decoration = self.document.get_decoration() - header = decoration.get_header() - header.extend(header_nodes) - footer_nodes = self.generate_footer() - if footer_nodes: - decoration = self.document.get_decoration() - footer = decoration.get_footer() - footer.extend(footer_nodes) - - def generate_header(self): - return None - - def generate_footer(self): - # @@@ Text is hard-coded for now. - # Should be made dynamic (language-dependent). - # @@@ Use timestamp from the `SOURCE_DATE_EPOCH`_ environment variable - # for the datestamp? - # See https://sourceforge.net/p/docutils/patches/132/ - # and https://reproducible-builds.org/specs/source-date-epoch/ - settings = self.document.settings - if settings.generator or settings.datestamp or settings.source_link \ - or settings.source_url: - text = [] - if settings.source_link and settings._source \ - or settings.source_url: - if settings.source_url: - source = settings.source_url - else: - source = utils.relative_path(settings._destination, - settings._source) - text.extend([ - nodes.reference('', 'View document source', - refuri=source), - nodes.Text('.\n')]) - if settings.datestamp: - datestamp = time.strftime(settings.datestamp, time.gmtime()) - text.append(nodes.Text('Generated on: ' + datestamp + '.\n')) - if settings.generator: - text.extend([ - nodes.Text('Generated by '), - nodes.reference('', 'Docutils', refuri= - 'http://docutils.sourceforge.net/'), - nodes.Text(' from '), - nodes.reference('', 'reStructuredText', refuri='http://' - 'docutils.sourceforge.net/rst.html'), - nodes.Text(' source.\n')]) - return [nodes.paragraph('', '', *text)] - else: - return None - - -class ExposeInternals(Transform): - - """ - Expose internal attributes if ``expose_internals`` setting is set. - """ - - default_priority = 840 - - def not_Text(self, node): - return not isinstance(node, nodes.Text) - - def apply(self): - if self.document.settings.expose_internals: - for node in self.document.traverse(self.not_Text): - for att in self.document.settings.expose_internals: - value = getattr(node, att, None) - if value is not None: - node['internal:' + att] = value - - -class Messages(Transform): - - """ - Place any system messages generated after parsing into a dedicated section - of the document. - """ - - default_priority = 860 - - def apply(self): - unfiltered = self.document.transform_messages - threshold = self.document.reporter.report_level - messages = [] - for msg in unfiltered: - if msg['level'] >= threshold and not msg.parent: - messages.append(msg) - if messages: - section = nodes.section(classes=['system-messages']) - # @@@ get this from the language module? - section += nodes.title('', 'Docutils System Messages') - section += messages - self.document.transform_messages[:] = [] - self.document += section - - -class FilterMessages(Transform): - - """ - Remove system messages below verbosity threshold. - """ - - default_priority = 870 - - def apply(self): - for node in tuple(self.document.traverse(nodes.system_message)): - if node['level'] < self.document.reporter.report_level: - node.parent.remove(node) - - -class TestMessages(Transform): - - """ - Append all post-parse system messages to the end of the document. - - Used for testing purposes. - """ - - default_priority = 880 - - def apply(self): - for msg in self.document.transform_messages: - if not msg.parent: - self.document += msg - - -class StripComments(Transform): - - """ - Remove comment elements from the document tree (only if the - ``strip_comments`` setting is enabled). - """ - - default_priority = 740 - - def apply(self): - if self.document.settings.strip_comments: - for node in tuple(self.document.traverse(nodes.comment)): - node.parent.remove(node) - - -class StripClassesAndElements(Transform): - - """ - Remove from the document tree all elements with classes in - `self.document.settings.strip_elements_with_classes` and all "classes" - attribute values in `self.document.settings.strip_classes`. - """ - - default_priority = 420 - - def apply(self): - if self.document.settings.strip_elements_with_classes: - self.strip_elements = set( - self.document.settings.strip_elements_with_classes) - # Iterate over a tuple as removing the current node - # corrupts the iterator returned by `traverse`: - for node in tuple(self.document.traverse(self.check_classes)): - node.parent.remove(node) - - if not self.document.settings.strip_classes: - return - strip_classes = self.document.settings.strip_classes - for node in self.document.traverse(nodes.Element): - for class_value in strip_classes: - try: - node['classes'].remove(class_value) - except ValueError: - pass - - def check_classes(self, node): - if not isinstance(node, nodes.Element): - return False - for class_value in node['classes'][:]: - if class_value in self.strip_elements: - return True - return False - - -class SmartQuotes(Transform): - - """ - Replace ASCII quotation marks with typographic form. - - Also replace multiple dashes with em-dash/en-dash characters. - """ - - default_priority = 850 - - nodes_to_skip = (nodes.FixedTextElement, nodes.Special) - """Do not apply "smartquotes" to instances of these block-level nodes.""" - - literal_nodes = (nodes.FixedTextElement, nodes.Special, - nodes.image, nodes.literal, nodes.math, - nodes.raw, nodes.problematic) - """Do apply smartquotes to instances of these inline nodes.""" - - smartquotes_action = 'qDe' - """Setting to select smartquote transformations. - - The default 'qDe' educates normal quote characters: (", '), - em- and en-dashes (---, --) and ellipses (...). - """ - - def __init__(self, document, startnode): - Transform.__init__(self, document, startnode=startnode) - self.unsupported_languages = set() - - def get_tokens(self, txtnodes): - # A generator that yields ``(texttype, nodetext)`` tuples for a list - # of "Text" nodes (interface to ``smartquotes.educate_tokens()``). - for node in txtnodes: - if (isinstance(node.parent, self.literal_nodes) - or isinstance(node.parent.parent, self.literal_nodes)): - yield ('literal', unicode(node)) - else: - # SmartQuotes uses backslash escapes instead of null-escapes - txt = re.sub('(?<=\x00)([-\\\'".`])', r'\\\1', unicode(node)) - yield ('plain', txt) - - def apply(self): - smart_quotes = self.document.settings.smart_quotes - if not smart_quotes: - return - try: - alternative = smart_quotes.startswith('alt') - except AttributeError: - alternative = False - - document_language = self.document.settings.language_code - lc_smartquotes = self.document.settings.smartquotes_locales - if lc_smartquotes: - smartquotes.smartchars.quotes.update(dict(lc_smartquotes)) - - # "Educate" quotes in normal text. Handle each block of text - # (TextElement node) as a unit to keep context around inline nodes: - for node in self.document.traverse(nodes.TextElement): - # skip preformatted text blocks and special elements: - if isinstance(node, self.nodes_to_skip): - continue - # nested TextElements are not "block-level" elements: - if isinstance(node.parent, nodes.TextElement): - continue - - # list of text nodes in the "text block": - txtnodes = [txtnode for txtnode in node.traverse(nodes.Text) - if not isinstance(txtnode.parent, - nodes.option_string)] - - # language: use typographical quotes for language "lang" - lang = node.get_language_code(document_language) - # use alternative form if `smart-quotes` setting starts with "alt": - if alternative: - if '-x-altquot' in lang: - lang = lang.replace('-x-altquot', '') - else: - lang += '-x-altquot' - # drop unsupported subtags: - for tag in utils.normalize_language_tag(lang): - if tag in smartquotes.smartchars.quotes: - lang = tag - break - else: # language not supported: (keep ASCII quotes) - if lang not in self.unsupported_languages: - self.document.reporter.warning('No smart quotes ' - 'defined for language "%s".'%lang, base_node=node) - self.unsupported_languages.add(lang) - lang = '' - - # Iterator educating quotes in plain text: - # (see "utils/smartquotes.py" for the attribute setting) - teacher = smartquotes.educate_tokens(self.get_tokens(txtnodes), - attr=self.smartquotes_action, language=lang) - - for txtnode, newtext in zip(txtnodes, teacher): - txtnode.parent.replace(txtnode, nodes.Text(newtext, - rawsource=txtnode.rawsource)) - - self.unsupported_languages = set() # reset diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/writer_aux.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/writer_aux.py deleted file mode 100644 index c5818d9..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/transforms/writer_aux.py +++ /dev/null @@ -1,88 +0,0 @@ -# $Id: writer_aux.py 7808 2015-02-27 17:03:32Z milde $ -# Author: Lea Wiemann <LeWiemann@gmail.com> -# Copyright: This module has been placed in the public domain. - -""" -Auxiliary transforms mainly to be used by Writer components. - -This module is called "writer_aux" because otherwise there would be -conflicting imports like this one:: - - from docutils import writers - from docutils.transforms import writers -""" - -__docformat__ = 'reStructuredText' - -from docutils import nodes, utils, languages -from docutils.transforms import Transform - - -class Compound(Transform): - - """ - Flatten all compound paragraphs. For example, transform :: - - <compound> - <paragraph> - <literal_block> - <paragraph> - - into :: - - <paragraph> - <literal_block classes="continued"> - <paragraph classes="continued"> - """ - - default_priority = 910 - - def apply(self): - for compound in self.document.traverse(nodes.compound): - first_child = True - for child in compound: - if first_child: - if not isinstance(child, nodes.Invisible): - first_child = False - else: - child['classes'].append('continued') - # Substitute children for compound. - compound.replace_self(compound[:]) - - -class Admonitions(Transform): - - """ - Transform specific admonitions, like this: - - <note> - <paragraph> - Note contents ... - - into generic admonitions, like this:: - - <admonition classes="note"> - <title> - Note - <paragraph> - Note contents ... - - The admonition title is localized. - """ - - default_priority = 920 - - def apply(self): - language = languages.get_language(self.document.settings.language_code, - self.document.reporter) - for node in self.document.traverse(nodes.Admonition): - node_name = node.__class__.__name__ - # Set class, so that we know what node this admonition came from. - node['classes'].append(node_name) - if not isinstance(node, nodes.admonition): - # Specific admonition. Transform into a generic admonition. - admonition = nodes.admonition(node.rawsource, *node.children, - **node.attributes) - title = nodes.title('', language.labels[node_name]) - admonition.insert(0, title) - node.replace_self(admonition) diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__init__.py deleted file mode 100644 index 0744b4a..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__init__.py +++ /dev/null @@ -1,797 +0,0 @@ -# coding: utf-8 -# $Id: __init__.py 8376 2019-08-27 19:49:29Z milde $ -# Author: David Goodger <goodger@python.org> -# Copyright: This module has been placed in the public domain. - -""" -Miscellaneous utilities for the documentation utilities. -""" - -__docformat__ = 'reStructuredText' - -import sys -import os -import os.path -import re -import itertools -import warnings -import unicodedata -from docutils import ApplicationError, DataError, __version_info__ -from docutils import nodes -from docutils.nodes import unescape -import docutils.io -from docutils.utils.error_reporting import ErrorOutput, SafeString - -if sys.version_info >= (3, 0): - unicode = str - - -class SystemMessage(ApplicationError): - - def __init__(self, system_message, level): - Exception.__init__(self, system_message.astext()) - self.level = level - - -class SystemMessagePropagation(ApplicationError): pass - - -class Reporter(object): - - """ - Info/warning/error reporter and ``system_message`` element generator. - - Five levels of system messages are defined, along with corresponding - methods: `debug()`, `info()`, `warning()`, `error()`, and `severe()`. - - There is typically one Reporter object per process. A Reporter object is - instantiated with thresholds for reporting (generating warnings) and - halting processing (raising exceptions), a switch to turn debug output on - or off, and an I/O stream for warnings. These are stored as instance - attributes. - - When a system message is generated, its level is compared to the stored - thresholds, and a warning or error is generated as appropriate. Debug - messages are produced if the stored debug switch is on, independently of - other thresholds. Message output is sent to the stored warning stream if - not set to ''. - - The Reporter class also employs a modified form of the "Observer" pattern - [GoF95]_ to track system messages generated. The `attach_observer` method - should be called before parsing, with a bound method or function which - accepts system messages. The observer can be removed with - `detach_observer`, and another added in its place. - - .. [GoF95] Gamma, Helm, Johnson, Vlissides. *Design Patterns: Elements of - Reusable Object-Oriented Software*. Addison-Wesley, Reading, MA, USA, - 1995. - """ - - levels = 'DEBUG INFO WARNING ERROR SEVERE'.split() - """List of names for system message levels, indexed by level.""" - - # system message level constants: - (DEBUG_LEVEL, - INFO_LEVEL, - WARNING_LEVEL, - ERROR_LEVEL, - SEVERE_LEVEL) = range(5) - - def __init__(self, source, report_level, halt_level, stream=None, - debug=False, encoding=None, error_handler='backslashreplace'): - """ - :Parameters: - - `source`: The path to or description of the source data. - - `report_level`: The level at or above which warning output will - be sent to `stream`. - - `halt_level`: The level at or above which `SystemMessage` - exceptions will be raised, halting execution. - - `debug`: Show debug (level=0) system messages? - - `stream`: Where warning output is sent. Can be file-like (has a - ``.write`` method), a string (file name, opened for writing), - '' (empty string) or `False` (for discarding all stream messages) - or `None` (implies `sys.stderr`; default). - - `encoding`: The output encoding. - - `error_handler`: The error handler for stderr output encoding. - """ - - self.source = source - """The path to or description of the source data.""" - - self.error_handler = error_handler - """The character encoding error handler.""" - - self.debug_flag = debug - """Show debug (level=0) system messages?""" - - self.report_level = report_level - """The level at or above which warning output will be sent - to `self.stream`.""" - - self.halt_level = halt_level - """The level at or above which `SystemMessage` exceptions - will be raised, halting execution.""" - - if not isinstance(stream, ErrorOutput): - stream = ErrorOutput(stream, encoding, error_handler) - - self.stream = stream - """Where warning output is sent.""" - - self.encoding = encoding or getattr(stream, 'encoding', 'ascii') - """The output character encoding.""" - - self.observers = [] - """List of bound methods or functions to call with each system_message - created.""" - - self.max_level = -1 - """The highest level system message generated so far.""" - - def set_conditions(self, category, report_level, halt_level, - stream=None, debug=False): - warnings.warn('docutils.utils.Reporter.set_conditions deprecated; ' - 'set attributes via configuration settings or directly', - DeprecationWarning, stacklevel=2) - self.report_level = report_level - self.halt_level = halt_level - if not isinstance(stream, ErrorOutput): - stream = ErrorOutput(stream, self.encoding, self.error_handler) - self.stream = stream - self.debug_flag = debug - - def attach_observer(self, observer): - """ - The `observer` parameter is a function or bound method which takes one - argument, a `nodes.system_message` instance. - """ - self.observers.append(observer) - - def detach_observer(self, observer): - self.observers.remove(observer) - - def notify_observers(self, message): - for observer in self.observers: - observer(message) - - def system_message(self, level, message, *children, **kwargs): - """ - Return a system_message object. - - Raise an exception or generate a warning if appropriate. - """ - # `message` can be a `string`, `unicode`, or `Exception` instance. - if isinstance(message, Exception): - message = SafeString(message) - - attributes = kwargs.copy() - if 'base_node' in kwargs: - source, line = get_source_line(kwargs['base_node']) - del attributes['base_node'] - if source is not None: - attributes.setdefault('source', source) - if line is not None: - attributes.setdefault('line', line) - # assert source is not None, "node has line- but no source-argument" - if not 'source' in attributes: # 'line' is absolute line number - try: # look up (source, line-in-source) - source, line = self.get_source_and_line(attributes.get('line')) - except AttributeError: - source, line = None, None - if source is not None: - attributes['source'] = source - if line is not None: - attributes['line'] = line - # assert attributes['line'] is not None, (message, kwargs) - # assert attributes['source'] is not None, (message, kwargs) - attributes.setdefault('source', self.source) - - msg = nodes.system_message(message, level=level, - type=self.levels[level], - *children, **attributes) - if self.stream and (level >= self.report_level - or self.debug_flag and level == self.DEBUG_LEVEL - or level >= self.halt_level): - self.stream.write(msg.astext() + '\n') - if level >= self.halt_level: - raise SystemMessage(msg, level) - if level > self.DEBUG_LEVEL or self.debug_flag: - self.notify_observers(msg) - self.max_level = max(level, self.max_level) - return msg - - def debug(self, *args, **kwargs): - """ - Level-0, "DEBUG": an internal reporting issue. Typically, there is no - effect on the processing. Level-0 system messages are handled - separately from the others. - """ - if self.debug_flag: - return self.system_message(self.DEBUG_LEVEL, *args, **kwargs) - - def info(self, *args, **kwargs): - """ - Level-1, "INFO": a minor issue that can be ignored. Typically there is - no effect on processing, and level-1 system messages are not reported. - """ - return self.system_message(self.INFO_LEVEL, *args, **kwargs) - - def warning(self, *args, **kwargs): - """ - Level-2, "WARNING": an issue that should be addressed. If ignored, - there may be unpredictable problems with the output. - """ - return self.system_message(self.WARNING_LEVEL, *args, **kwargs) - - def error(self, *args, **kwargs): - """ - Level-3, "ERROR": an error that should be addressed. If ignored, the - output will contain errors. - """ - return self.system_message(self.ERROR_LEVEL, *args, **kwargs) - - def severe(self, *args, **kwargs): - """ - Level-4, "SEVERE": a severe error that must be addressed. If ignored, - the output will contain severe errors. Typically level-4 system - messages are turned into exceptions which halt processing. - """ - return self.system_message(self.SEVERE_LEVEL, *args, **kwargs) - - -class ExtensionOptionError(DataError): pass -class BadOptionError(ExtensionOptionError): pass -class BadOptionDataError(ExtensionOptionError): pass -class DuplicateOptionError(ExtensionOptionError): pass - - -def extract_extension_options(field_list, options_spec): - """ - Return a dictionary mapping extension option names to converted values. - - :Parameters: - - `field_list`: A flat field list without field arguments, where each - field body consists of a single paragraph only. - - `options_spec`: Dictionary mapping known option names to a - conversion function such as `int` or `float`. - - :Exceptions: - - `KeyError` for unknown option names. - - `ValueError` for invalid option values (raised by the conversion - function). - - `TypeError` for invalid option value types (raised by conversion - function). - - `DuplicateOptionError` for duplicate options. - - `BadOptionError` for invalid fields. - - `BadOptionDataError` for invalid option data (missing name, - missing data, bad quotes, etc.). - """ - option_list = extract_options(field_list) - option_dict = assemble_option_dict(option_list, options_spec) - return option_dict - -def extract_options(field_list): - """ - Return a list of option (name, value) pairs from field names & bodies. - - :Parameter: - `field_list`: A flat field list, where each field name is a single - word and each field body consists of a single paragraph only. - - :Exceptions: - - `BadOptionError` for invalid fields. - - `BadOptionDataError` for invalid option data (missing name, - missing data, bad quotes, etc.). - """ - option_list = [] - for field in field_list: - if len(field[0].astext().split()) != 1: - raise BadOptionError( - 'extension option field name may not contain multiple words') - name = str(field[0].astext().lower()) - body = field[1] - if len(body) == 0: - data = None - elif len(body) > 1 or not isinstance(body[0], nodes.paragraph) \ - or len(body[0]) != 1 or not isinstance(body[0][0], nodes.Text): - raise BadOptionDataError( - 'extension option field body may contain\n' - 'a single paragraph only (option "%s")' % name) - else: - data = body[0][0].astext() - option_list.append((name, data)) - return option_list - -def assemble_option_dict(option_list, options_spec): - """ - Return a mapping of option names to values. - - :Parameters: - - `option_list`: A list of (name, value) pairs (the output of - `extract_options()`). - - `options_spec`: Dictionary mapping known option names to a - conversion function such as `int` or `float`. - - :Exceptions: - - `KeyError` for unknown option names. - - `DuplicateOptionError` for duplicate options. - - `ValueError` for invalid option values (raised by conversion - function). - - `TypeError` for invalid option value types (raised by conversion - function). - """ - options = {} - for name, value in option_list: - convertor = options_spec[name] # raises KeyError if unknown - if convertor is None: - raise KeyError(name) # or if explicitly disabled - if name in options: - raise DuplicateOptionError('duplicate option "%s"' % name) - try: - options[name] = convertor(value) - except (ValueError, TypeError) as detail: - raise detail.__class__('(option: "%s"; value: %r)\n%s' - % (name, value, ' '.join(detail.args))) - return options - - -class NameValueError(DataError): pass - - -def decode_path(path): - """ - Ensure `path` is Unicode. Return `nodes.reprunicode` object. - - Decode file/path string in a failsave manner if not already done. - """ - # see also http://article.gmane.org/gmane.text.docutils.user/2905 - if isinstance(path, unicode): - return path - try: - path = path.decode(sys.getfilesystemencoding(), 'strict') - except AttributeError: # default value None has no decode method - return nodes.reprunicode(path) - except UnicodeDecodeError: - try: - path = path.decode('utf-8', 'strict') - except UnicodeDecodeError: - path = path.decode('ascii', 'replace') - return nodes.reprunicode(path) - - -def extract_name_value(line): - """ - Return a list of (name, value) from a line of the form "name=value ...". - - :Exception: - `NameValueError` for invalid input (missing name, missing data, bad - quotes, etc.). - """ - attlist = [] - while line: - equals = line.find('=') - if equals == -1: - raise NameValueError('missing "="') - attname = line[:equals].strip() - if equals == 0 or not attname: - raise NameValueError( - 'missing attribute name before "="') - line = line[equals+1:].lstrip() - if not line: - raise NameValueError( - 'missing value after "%s="' % attname) - if line[0] in '\'"': - endquote = line.find(line[0], 1) - if endquote == -1: - raise NameValueError( - 'attribute "%s" missing end quote (%s)' - % (attname, line[0])) - if len(line) > endquote + 1 and line[endquote + 1].strip(): - raise NameValueError( - 'attribute "%s" end quote (%s) not followed by ' - 'whitespace' % (attname, line[0])) - data = line[1:endquote] - line = line[endquote+1:].lstrip() - else: - space = line.find(' ') - if space == -1: - data = line - line = '' - else: - data = line[:space] - line = line[space+1:].lstrip() - attlist.append((attname.lower(), data)) - return attlist - -def new_reporter(source_path, settings): - """ - Return a new Reporter object. - - :Parameters: - `source` : string - The path to or description of the source text of the document. - `settings` : optparse.Values object - Runtime settings. - """ - reporter = Reporter( - source_path, settings.report_level, settings.halt_level, - stream=settings.warning_stream, debug=settings.debug, - encoding=settings.error_encoding, - error_handler=settings.error_encoding_error_handler) - return reporter - -def new_document(source_path, settings=None): - """ - Return a new empty document object. - - :Parameters: - `source_path` : string - The path to or description of the source text of the document. - `settings` : optparse.Values object - Runtime settings. If none are provided, a default core set will - be used. If you will use the document object with any Docutils - components, you must provide their default settings as well. For - example, if parsing, at least provide the parser settings, - obtainable as follows:: - - settings = docutils.frontend.OptionParser( - components=(docutils.parsers.rst.Parser,) - ).get_default_values() - """ - from docutils import frontend - if settings is None: - settings = frontend.OptionParser().get_default_values() - source_path = decode_path(source_path) - reporter = new_reporter(source_path, settings) - document = nodes.document(settings, reporter, source=source_path) - document.note_source(source_path, -1) - return document - -def clean_rcs_keywords(paragraph, keyword_substitutions): - if len(paragraph) == 1 and isinstance(paragraph[0], nodes.Text): - textnode = paragraph[0] - for pattern, substitution in keyword_substitutions: - match = pattern.search(textnode) - if match: - paragraph[0] = nodes.Text(pattern.sub(substitution, textnode)) - return - -def relative_path(source, target): - """ - Build and return a path to `target`, relative to `source` (both files). - - If there is no common prefix, return the absolute path to `target`. - """ - source_parts = os.path.abspath(source or type(target)('dummy_file') - ).split(os.sep) - target_parts = os.path.abspath(target).split(os.sep) - # Check first 2 parts because '/dir'.split('/') == ['', 'dir']: - if source_parts[:2] != target_parts[:2]: - # Nothing in common between paths. - # Return absolute path, using '/' for URLs: - return '/'.join(target_parts) - source_parts.reverse() - target_parts.reverse() - while (source_parts and target_parts - and source_parts[-1] == target_parts[-1]): - # Remove path components in common: - source_parts.pop() - target_parts.pop() - target_parts.reverse() - parts = ['..'] * (len(source_parts) - 1) + target_parts - return '/'.join(parts) - -def get_stylesheet_reference(settings, relative_to=None): - """ - Retrieve a stylesheet reference from the settings object. - - Deprecated. Use get_stylesheet_list() instead to - enable specification of multiple stylesheets as a comma-separated - list. - """ - if settings.stylesheet_path: - assert not settings.stylesheet, ( - 'stylesheet and stylesheet_path are mutually exclusive.') - if relative_to == None: - relative_to = settings._destination - return relative_path(relative_to, settings.stylesheet_path) - else: - return settings.stylesheet - -# Return 'stylesheet' or 'stylesheet_path' arguments as list. -# -# The original settings arguments are kept unchanged: you can test -# with e.g. ``if settings.stylesheet_path:`` -# -# Differences to ``get_stylesheet_reference``: -# * return value is a list -# * no re-writing of the path (and therefore no optional argument) -# (if required, use ``utils.relative_path(source, target)`` -# in the calling script) -def get_stylesheet_list(settings): - """ - Retrieve list of stylesheet references from the settings object. - """ - assert not (settings.stylesheet and settings.stylesheet_path), ( - 'stylesheet and stylesheet_path are mutually exclusive.') - stylesheets = settings.stylesheet_path or settings.stylesheet or [] - # programmatically set default can be string or unicode: - if not isinstance(stylesheets, list): - stylesheets = [path.strip() for path in stylesheets.split(',')] - # expand relative paths if found in stylesheet-dirs: - return [find_file_in_dirs(path, settings.stylesheet_dirs) - for path in stylesheets] - -def find_file_in_dirs(path, dirs): - """ - Search for `path` in the list of directories `dirs`. - - Return the first expansion that matches an existing file. - """ - if os.path.isabs(path): - return path - for d in dirs: - if d == '.': - f = path - else: - d = os.path.expanduser(d) - f = os.path.join(d, path) - if os.path.exists(f): - return f - return path - -def get_trim_footnote_ref_space(settings): - """ - Return whether or not to trim footnote space. - - If trim_footnote_reference_space is not None, return it. - - If trim_footnote_reference_space is None, return False unless the - footnote reference style is 'superscript'. - """ - if settings.trim_footnote_reference_space is None: - return hasattr(settings, 'footnote_references') and \ - settings.footnote_references == 'superscript' - else: - return settings.trim_footnote_reference_space - -def get_source_line(node): - """ - Return the "source" and "line" attributes from the `node` given or from - its closest ancestor. - """ - while node: - if node.source or node.line: - return node.source, node.line - node = node.parent - return None, None - -def escape2null(text): - """Return a string with escape-backslashes converted to nulls.""" - parts = [] - start = 0 - while True: - found = text.find('\\', start) - if found == -1: - parts.append(text[start:]) - return ''.join(parts) - parts.append(text[start:found]) - parts.append('\x00' + text[found+1:found+2]) - start = found + 2 # skip character after escape - -# `unescape` definition moved to `nodes` to avoid circular import dependency. - -def split_escaped_whitespace(text): - """ - Split `text` on escaped whitespace (null+space or null+newline). - Return a list of strings. - """ - strings = text.split('\x00 ') - strings = [string.split('\x00\n') for string in strings] - # flatten list of lists of strings to list of strings: - return list(itertools.chain(*strings)) - -def strip_combining_chars(text): - if isinstance(text, str) and sys.version_info < (3, 0): - return text - return u''.join([c for c in text if not unicodedata.combining(c)]) - -def find_combining_chars(text): - """Return indices of all combining chars in Unicode string `text`. - - >>> from docutils.utils import find_combining_chars - >>> find_combining_chars(u'A t̆ab̆lĕ') - [3, 6, 9] - - """ - if isinstance(text, str) and sys.version_info < (3, 0): - return [] - return [i for i,c in enumerate(text) if unicodedata.combining(c)] - -def column_indices(text): - """Indices of Unicode string `text` when skipping combining characters. - - >>> from docutils.utils import column_indices - >>> column_indices(u'A t̆ab̆lĕ') - [0, 1, 2, 4, 5, 7, 8] - - """ - # TODO: account for asian wide chars here instead of using dummy - # replacements in the tableparser? - string_indices = list(range(len(text))) - for index in find_combining_chars(text): - string_indices[index] = None - return [i for i in string_indices if i is not None] - -east_asian_widths = {'W': 2, # Wide - 'F': 2, # Full-width (wide) - 'Na': 1, # Narrow - 'H': 1, # Half-width (narrow) - 'N': 1, # Neutral (not East Asian, treated as narrow) - 'A': 1} # Ambiguous (s/b wide in East Asian context, - # narrow otherwise, but that doesn't work) -"""Mapping of result codes from `unicodedata.east_asian_widt()` to character -column widths.""" - -def column_width(text): - """Return the column width of text. - - Correct ``len(text)`` for wide East Asian and combining Unicode chars. - """ - if isinstance(text, str) and sys.version_info < (3, 0): - return len(text) - width = sum([east_asian_widths[unicodedata.east_asian_width(c)] - for c in text]) - # correction for combining chars: - width -= len(find_combining_chars(text)) - return width - -def uniq(L): - r = [] - for item in L: - if not item in r: - r.append(item) - return r - -def unique_combinations(items, n): - """Return `itertools.combinations`.""" - warnings.warn('docutils.utils.unique_combinations is deprecated; ' - 'use itertools.combinations directly.', - DeprecationWarning, stacklevel=2) - return itertools.combinations(items, n) - -def normalize_language_tag(tag): - """Return a list of normalized combinations for a `BCP 47` language tag. - - Example: - - >>> from docutils.utils import normalize_language_tag - >>> normalize_language_tag('de_AT-1901') - ['de-at-1901', 'de-at', 'de-1901', 'de'] - >>> normalize_language_tag('de-CH-x_altquot') - ['de-ch-x-altquot', 'de-ch', 'de-x-altquot', 'de'] - - """ - # normalize: - tag = tag.lower().replace('-', '_') - # split (except singletons, which mark the following tag as non-standard): - tag = re.sub(r'_([a-zA-Z0-9])_', r'_\1-', tag) - subtags = [subtag for subtag in tag.split('_')] - base_tag = (subtags.pop(0),) - # find all combinations of subtags - taglist = [] - for n in range(len(subtags), 0, -1): - # for tags in unique_combinations(subtags, n): - for tags in itertools.combinations(subtags, n): - taglist.append('-'.join(base_tag+tags)) - taglist += base_tag - return taglist - - -class DependencyList(object): - - """ - List of dependencies, with file recording support. - - Note that the output file is not automatically closed. You have - to explicitly call the close() method. - """ - - def __init__(self, output_file=None, dependencies=[]): - """ - Initialize the dependency list, automatically setting the - output file to `output_file` (see `set_output()`) and adding - all supplied dependencies. - """ - self.set_output(output_file) - for i in dependencies: - self.add(i) - - def set_output(self, output_file): - """ - Set the output file and clear the list of already added - dependencies. - - `output_file` must be a string. The specified file is - immediately overwritten. - - If output_file is '-', the output will be written to stdout. - If it is None, no file output is done when calling add(). - """ - self.list = [] - if output_file: - if output_file == '-': - of = None - else: - of = output_file - self.file = docutils.io.FileOutput(destination_path=of, - encoding='utf8', autoclose=False) - else: - self.file = None - - def add(self, *filenames): - """ - If the dependency `filename` has not already been added, - append it to self.list and print it to self.file if self.file - is not None. - """ - for filename in filenames: - if not filename in self.list: - self.list.append(filename) - if self.file is not None: - self.file.write(filename+'\n') - - def close(self): - """ - Close the output file. - """ - self.file.close() - self.file = None - - def __repr__(self): - try: - output_file = self.file.name - except AttributeError: - output_file = None - return '%s(%r, %s)' % (self.__class__.__name__, output_file, self.list) - - -release_level_abbreviations = { - 'alpha': 'a', - 'beta': 'b', - 'candidate': 'rc', - 'final': '',} - -def version_identifier(version_info=None): - """ - Return a version identifier string built from `version_info`, a - `docutils.VersionInfo` namedtuple instance or compatible tuple. If - `version_info` is not provided, by default return a version identifier - string based on `docutils.__version_info__` (i.e. the current Docutils - version). - """ - if version_info is None: - version_info = __version_info__ - if version_info.micro: - micro = '.%s' % version_info.micro - else: - # 0 is omitted: - micro = '' - releaselevel = release_level_abbreviations[version_info.releaselevel] - if version_info.serial: - serial = version_info.serial - else: - # 0 is omitted: - serial = '' - if version_info.release: - dev = '' - else: - dev = '.dev' - version = '%s.%s%s%s%s%s' % ( - version_info.major, - version_info.minor, - micro, - releaselevel, - serial, - dev) - return version diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 46a8ee85d3459ab91113a1c8e604721d209c9112..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25111 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 R?~zkBj!d76-~S|+`@e{_+9Ln} diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/code_analyzer.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/code_analyzer.cpython-38.pyc deleted file mode 100644 index 96bfaabd742afb397bab858aac68d5d6d0c1f552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4373 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 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/error_reporting.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/error_reporting.cpython-38.pyc deleted file mode 100644 index d0485bc698e7d70c8e8c0c433e8838667810cd87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6367 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 KGN;Z@jsF|yXe(6! diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/punctuation_chars.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/punctuation_chars.cpython-38.pyc deleted file mode 100644 index 918f2881321d2718093a26c72ee62a79adb444ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2316 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 WyNC8~dtBY^?Okry|MY)%UidFn<Zjad diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/roman.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/roman.cpython-38.pyc deleted file mode 100644 index 4a21e69414575ca08ee15795362ba8d65a5e29ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2809 zcmb7G-ER{|5a0W7>|C4=3Iup4+9ptJDY2c8(u7upVx!7Z5)ibOWwp2$@5VlIzH|2W z65^hv3aHe_{t58NKhr<pUi(tNSAFPHXVw>R00}s2*E4gwJHOeT-|YP`J#7(q{`|T2 z@K=!jLS_6hLAeDjcmf?G4Z^gB#`K2HjE2F?hRITF!c8?&-w~E(nP-G$_{3AAkp_K| zS)f}y4SELjDV7C2tMp0Gr`ZhXGfKDEY-5Veu`|y|Bg<3Ir`abw^=RgW-k4=)**UPz zv55yHf4;v^_Ps+cB$Yn3Jx2G0-=+8cuI*7T>~dkdLI3k@TkO+&j@uSam*)01*zqmq z9CF8#e(zXze6Qe(cD`?{6xRFG8}!?-9R`xFmP#vjTO*_lqlDA$NSbTqm6?vOXj$KP zoPhR(-xhY4qG$ske~&IyzzeN{8+uRqSy-YrK;%5psSKqr9NVRPzOeY?9v2SxTAZD% z1`z}WN^4HwNZOIIccWN*8+s9^Q`zB`YfBE$VMhW7!g?E;avu15^2iqaD|+mQv;})5 zICBCioZV1z3a(%)i?C$ZXU^WS1%}XLT)Ci<i*A6?fxnY5RtqbI73w-I?gboTJhUCx z-gP;(rInyQIyx%6-t3~9QA}nOI<o6pL&zzz)53oIfdd%jTowdQAm0e&n+B(^$Cf(j zJ3{zk=cN&6noZB{@@6x(noYnSx+rIx&4bW(M{iydk%o0t_uocQc6-I1(_0R`p55B# zZ273exx3t46J36A{kX{dRwx}eD2{qaF581Jgbr(*gBGBWAxi%!<g<4}d3W!=?X~#` zzA#Q;y#^>UXq$xYJhT&EsDGTV9bZBc@-`Rm^M&-EAM=I!NBO!~^$u;<Vd`LZMhtwP z(<yLrVazG&`Dr*_ZQJ=9wj~b*ro8PuQ(~-DoPQuEl(FLcp~P4#4;jvak@fPhp~P6* z8m^ugw}!dISRZ0gII>zF;$EVo+AwuutPQcsp|Lu|+-qTX^583gLCVmAUFet=5fe=N zM4V&#J_#;+x<({n##8NyCgJT<X#0j(l{z!g#!>@K8Wr->!jJku9~cpdjQy0j5owYB zB^kiz$k-qQa&Y?qY>?&?ecDQj98@ekMJ#rwYMelf&hKXl>0gDiw+lo3P?aEo8Afwm zENHu&t`rLEo12^Y{-=z$oGw&HMSss%Zxc71#UyX4yo(KRDR9H$S(W_Bk#5_)ycug= zJRx`xx-w2D)izEi7~ja^I4ykz8IK`A>JWWi%V=3Gqnp?(SuBFx-T+cr6rP9Jz40tU z7;VS%9IuT<2#c22R-?CnDJ`uJP7hy%D&>a(l(T>?(-LmnI^Dh&s0q39c2urJm78Ul zxi-k-)J58XQU~P_$8VNO6b9v&=(>_BAeENaP*zK=(ekw*zoZsB?RTUtjvJwzeo-nd zZ{Y085>#y0^^c&^?;ekEjTRdLtCyqtR<w1qJ`PMmaaEvbu3lD{K-fwky+Ty~FhmLs zfT6jqcVfY1Mp&x#s9K9^H>=}Ve2*(EG*_)76!@==kh}s?{cs@58#GsYCk$Lf!MHNM zm5IDaIo$ZCli(Cvk<$~<6k8vG5Ro7Y+|)+ge6C02g%&J;1*CakDzMWSVAB;tuLDDk zfeDP%BVC#iaQXuIO}~VU)kOgqYbwSj??BcMt{;FMSZls!?J25a3MLfk&sV)3&=fD= zgn_%R?d|t3B}Mc!$#2lBfg*Z7C9p)sXU7?N&z5jA10e%$i&jTm#u0|gy?iRx0zpwt zIdF?V7N3DE7O;DD6{?#ip2V*wg;wntUIYZ#nb9pR3;)Q|i@?)4P2}NC{!E;1HsOXG z-M4lKR1+XiHJi!z2PkkQGx#O}X}Z~LoqR}vstX=Z-g(^OJqceb>H<|2M->|tp9(=$ zggD*uyFJI{ak_Tr{_VRD?uaW0A5o0OprXMmGtPWHy8XYwx)|VAm<m6{FqJXpAOiRq O=1gXG!ZQCgv;PD5W}#95 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/smartquotes.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/smartquotes.cpython-38.pyc deleted file mode 100644 index 0fafbccaf12254740fd3276792c549de28e7abc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29494 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 MFZ9ODkF)sxA8-C^ga7~l diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/urischemes.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/__pycache__/urischemes.cpython-38.pyc deleted file mode 100644 index 8f6f047742383d01f36b6f01590408fb9024ab43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5205 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 J=hy$!zX9<<!<Ya7 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/code_analyzer.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/code_analyzer.py deleted file mode 100644 index 834fc07..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/code_analyzer.py +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/python -# coding: utf-8 - -"""Lexical analysis of formal languages (i.e. code) using Pygments.""" - -# :Author: Georg Brandl; Felix Wiemann; Günter Milde -# :Date: $Date: 2019-08-26 18:46:50 +0200 (Mo, 26. Aug 2019) $ -# :Copyright: This module has been placed in the public domain. - -from docutils import ApplicationError -try: - from pkg_resources import DistributionNotFound as ResourceError -except (ImportError, RuntimeError): - class ResourceError(ApplicationError): - pass # stub -try: - import pygments - from pygments.lexers import get_lexer_by_name - from pygments.formatters.html import _get_ttype_class - with_pygments = True -except ImportError: - with_pygments = False - -# Filter the following token types from the list of class arguments: -unstyled_tokens = ['token', # Token (base token type) - 'text', # Token.Text - ''] # short name for Token and Text -# (Add, e.g., Token.Punctuation with ``unstyled_tokens += 'punctuation'``.) - -class LexerError(ApplicationError): - pass - -class Lexer(object): - """Parse `code` lines and yield "classified" tokens. - - Arguments - - code -- string of source code to parse, - language -- formal language the code is written in, - tokennames -- either 'long', 'short', or '' (see below). - - Merge subsequent tokens of the same token-type. - - Iterating over an instance yields the tokens as ``(tokentype, value)`` - tuples. The value of `tokennames` configures the naming of the tokentype: - - 'long': downcased full token type name, - 'short': short name defined by pygments.token.STANDARD_TYPES - (= class argument used in pygments html output), - 'none': skip lexical analysis. - """ - - def __init__(self, code, language, tokennames='short'): - """ - Set up a lexical analyzer for `code` in `language`. - """ - self.code = code - self.language = language - self.tokennames = tokennames - self.lexer = None - # get lexical analyzer for `language`: - if language in ('', 'text') or tokennames == 'none': - return - if not with_pygments: - raise LexerError('Cannot analyze code. ' - 'Pygments package not found.') - try: - self.lexer = get_lexer_by_name(self.language) - except (pygments.util.ClassNotFound, ResourceError): - raise LexerError('Cannot analyze code. ' - 'No Pygments lexer found for "%s".' % language) - # self.lexer.add_filter('tokenmerge') - # Since version 1.2. (released Jan 01, 2010) Pygments has a - # TokenMergeFilter. # ``self.merge(tokens)`` in __iter__ could - # be replaced by ``self.lexer.add_filter('tokenmerge')`` in __init__. - # However, `merge` below also strips a final newline added by pygments. - # - # self.lexer.add_filter('tokenmerge') - - def merge(self, tokens): - """Merge subsequent tokens of same token-type. - - Also strip the final newline (added by pygments). - """ - tokens = iter(tokens) - (lasttype, lastval) = next(tokens) - for ttype, value in tokens: - if ttype is lasttype: - lastval += value - else: - yield(lasttype, lastval) - (lasttype, lastval) = (ttype, value) - if lastval.endswith('\n'): - lastval = lastval[:-1] - if lastval: - yield(lasttype, lastval) - - def __iter__(self): - """Parse self.code and yield "classified" tokens. - """ - if self.lexer is None: - yield ([], self.code) - return - tokens = pygments.lex(self.code, self.lexer) - for tokentype, value in self.merge(tokens): - if self.tokennames == 'long': # long CSS class args - classes = str(tokentype).lower().split('.') - else: # short CSS class args - classes = [_get_ttype_class(tokentype)] - classes = [cls for cls in classes if cls not in unstyled_tokens] - yield (classes, value) - - -class NumberLines(object): - """Insert linenumber-tokens at the start of every code line. - - Arguments - - tokens -- iterable of ``(classes, value)`` tuples - startline -- first line number - endline -- last line number - - Iterating over an instance yields the tokens with a - ``(['ln'], '<the line number>')`` token added for every code line. - Multi-line tokens are splitted.""" - - def __init__(self, tokens, startline, endline): - self.tokens = tokens - self.startline = startline - # pad linenumbers, e.g. endline == 100 -> fmt_str = '%3d ' - self.fmt_str = '%%%dd ' % len(str(endline)) - - def __iter__(self): - lineno = self.startline - yield (['ln'], self.fmt_str % lineno) - for ttype, value in self.tokens: - lines = value.split('\n') - for line in lines[:-1]: - yield (ttype, line + '\n') - lineno += 1 - yield (['ln'], self.fmt_str % lineno) - yield (ttype, lines[-1]) diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/error_reporting.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/error_reporting.py deleted file mode 100644 index 64cd953..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/error_reporting.py +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# :Id: $Id: error_reporting.py 8367 2019-08-27 12:09:56Z milde $ -# :Copyright: © 2011 Günter Milde. -# :License: Released under the terms of the `2-Clause BSD license`_, in short: -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause - -""" -Error reporting should be safe from encoding/decoding errors. -However, implicit conversions of strings and exceptions like - ->>> u'%s world: %s' % ('H\xe4llo', Exception(u'H\xe4llo') - -fail in some Python versions: - -* In Python <= 2.6, ``unicode(<exception instance>)`` uses - `__str__` and fails with non-ASCII chars in`unicode` arguments. - (work around http://bugs.python.org/issue2517): - -* In Python 2, unicode(<exception instance>) fails, with non-ASCII - chars in arguments. (Use case: in some locales, the errstr - argument of IOError contains non-ASCII chars.) - -* In Python 2, str(<exception instance>) fails, with non-ASCII chars - in `unicode` arguments. - -The `SafeString`, `ErrorString` and `ErrorOutput` classes handle -common exceptions. -""" - -import codecs -import sys - -# Guess the locale's encoding. -# If no valid guess can be made, locale_encoding is set to `None`: -try: - import locale # module missing in Jython -except ImportError: - locale_encoding = None -else: - try: - locale_encoding = locale.getlocale()[1] or locale.getdefaultlocale()[1] - # locale.getpreferredencoding([do_setlocale=True|False]) - # has side-effects | might return a wrong guess. - # (cf. Update 1 in http://stackoverflow.com/questions/4082645/using-python-2-xs-locale-module-to-format-numbers-and-currency) - except ValueError as error: # OS X may set UTF-8 without language code - # see http://bugs.python.org/issue18378 - # and https://sourceforge.net/p/docutils/bugs/298/ - if "unknown locale: UTF-8" in error.args: - locale_encoding = "UTF-8" - else: - locale_encoding = None - except: # any other problems determining the locale -> use None - locale_encoding = None - try: - codecs.lookup(locale_encoding or '') # None -> '' - except LookupError: - locale_encoding = None - - -if sys.version_info >= (3, 0): - unicode = str # noqa - - -class SafeString(object): - """ - A wrapper providing robust conversion to `str` and `unicode`. - """ - - def __init__(self, data, encoding=None, encoding_errors='backslashreplace', - decoding_errors='replace'): - self.data = data - self.encoding = (encoding or getattr(data, 'encoding', None) or - locale_encoding or 'ascii') - self.encoding_errors = encoding_errors - self.decoding_errors = decoding_errors - - - def __str__(self): - try: - return str(self.data) - except UnicodeEncodeError: - if isinstance(self.data, Exception): - args = [str(SafeString(arg, self.encoding, - self.encoding_errors)) - for arg in self.data.args] - return ', '.join(args) - if isinstance(self.data, unicode): - if sys.version_info > (3, 0): - return self.data - else: - return self.data.encode(self.encoding, - self.encoding_errors) - raise - - def __unicode__(self): - """ - Return unicode representation of `self.data`. - - Try ``unicode(self.data)``, catch `UnicodeError` and - - * if `self.data` is an Exception instance, work around - http://bugs.python.org/issue2517 with an emulation of - Exception.__unicode__, - - * else decode with `self.encoding` and `self.decoding_errors`. - """ - try: - u = unicode(self.data) - if isinstance(self.data, EnvironmentError): - u = u.replace(": u'", ": '") # normalize filename quoting - return u - except UnicodeError as error: # catch ..Encode.. and ..Decode.. errors - if isinstance(self.data, EnvironmentError): - return u"[Errno %s] %s: '%s'" % (self.data.errno, - SafeString(self.data.strerror, self.encoding, - self.decoding_errors), - SafeString(self.data.filename, self.encoding, - self.decoding_errors)) - if isinstance(self.data, Exception): - args = [unicode(SafeString(arg, self.encoding, - decoding_errors=self.decoding_errors)) - for arg in self.data.args] - return u', '.join(args) - if isinstance(error, UnicodeDecodeError): - return unicode(self.data, self.encoding, self.decoding_errors) - raise - -class ErrorString(SafeString): - """ - Safely report exception type and message. - """ - def __str__(self): - return '%s: %s' % (self.data.__class__.__name__, - super(ErrorString, self).__str__()) - - def __unicode__(self): - return u'%s: %s' % (self.data.__class__.__name__, - super(ErrorString, self).__unicode__()) - - -class ErrorOutput(object): - """ - Wrapper class for file-like error streams with - failsave de- and encoding of `str`, `bytes`, `unicode` and - `Exception` instances. - """ - - def __init__(self, stream=None, encoding=None, - encoding_errors='backslashreplace', - decoding_errors='replace'): - """ - :Parameters: - - `stream`: a file-like object, - a string (path to a file), - `None` (write to `sys.stderr`, default), or - evaluating to `False` (write() requests are ignored). - - `encoding`: `stream` text encoding. Guessed if None. - - `encoding_errors`: how to treat encoding errors. - """ - if stream is None: - stream = sys.stderr - elif not(stream): - stream = False - # if `stream` is a file name, open it - elif isinstance(stream, str): - stream = open(stream, 'w') - elif isinstance(stream, unicode): - stream = open(stream.encode(sys.getfilesystemencoding()), 'w') - - self.stream = stream - """Where warning output is sent.""" - - self.encoding = (encoding or getattr(stream, 'encoding', None) or - locale_encoding or 'ascii') - """The output character encoding.""" - - self.encoding_errors = encoding_errors - """Encoding error handler.""" - - self.decoding_errors = decoding_errors - """Decoding error handler.""" - - def write(self, data): - """ - Write `data` to self.stream. Ignore, if self.stream is False. - - `data` can be a `string`, `unicode`, or `Exception` instance. - """ - if self.stream is False: - return - if isinstance(data, Exception): - data = unicode(SafeString(data, self.encoding, - self.encoding_errors, self.decoding_errors)) - try: - self.stream.write(data) - except UnicodeEncodeError: - self.stream.write(data.encode(self.encoding, self.encoding_errors)) - except TypeError: - if isinstance(data, unicode): # passed stream may expect bytes - self.stream.write(data.encode(self.encoding, - self.encoding_errors)) - return - if self.stream in (sys.stderr, sys.stdout): - self.stream.buffer.write(data) # write bytes to raw stream - else: - self.stream.write(unicode(data, self.encoding, - self.decoding_errors)) - - def close(self): - """ - Close the error-output stream. - - Ignored if the stream is` sys.stderr` or `sys.stdout` or has no - close() method. - """ - if self.stream in (sys.stdout, sys.stderr): - return - try: - self.stream.close() - except AttributeError: - pass diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__init__.py deleted file mode 100644 index 673f93e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__init__.py +++ /dev/null @@ -1,48 +0,0 @@ -# :Id: $Id: __init__.py 7865 2015-04-12 10:06:43Z milde $ -# :Author: Guenter Milde. -# :License: Released under the terms of the `2-Clause BSD license`_, in short: -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause - -""" -This is the Docutils (Python Documentation Utilities) "math" sub-package. - -It contains various modules for conversion between different math formats -(LaTeX, MathML, HTML). - -:math2html: LaTeX math -> HTML conversion from eLyXer -:latex2mathml: LaTeX math -> presentational MathML -:unichar2tex: Unicode character to LaTeX math translation table -:tex2unichar: LaTeX math to Unicode character translation dictionaries -:tex2mathml_extern: Wrapper for TeX -> MathML command line converters -""" - -# helpers for Docutils math support -# ================================= - -def pick_math_environment(code, numbered=False): - """Return the right math environment to display `code`. - - The test simply looks for line-breaks (``\\``) outside environments. - Multi-line formulae are set with ``align``, one-liners with - ``equation``. - - If `numbered` evaluates to ``False``, the "starred" versions are used - to suppress numbering. - """ - # cut out environment content: - chunks = code.split(r'\begin{') - toplevel_code = ''.join([chunk.split(r'\end{')[-1] - for chunk in chunks]) - if toplevel_code.find(r'\\') >= 0: - env = 'align' - else: - env = 'equation' - if not numbered: - env += '*' - return env diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 6e2bc825734f873e952769686506081c23cfd14e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1453 zcmZux!EPHj5G7YDS>4t}5G02dJrF)wg=GaU&;o*C1Z`k6fL#=g-3Ef%U1~{5thn4Y z$(18VJ~cnkKX8uynSQ|b*pq*umvm+&6)F(Iq?hE(o0&IHyxiT52#i0IAAk9)MabW{ z*&YqpJca2V!Xn6kh^7cc;|(295xyXu7Qd&2L>E)#82tIEWY6-n^h!In|NX*Gb5kE= z(s=F_>@ML>c_m$k?Pc6g_n0e3-GZkxK9Pq}^xU&F2V-R%n{%u3(y=TTrIwD3bBmXA zX&pk1q`#KZFrmg{X(0kbK(vDYF4{li7xLu+JBP#bvjg_+#ratWBJ|PfXzDZFXE183 zm1p;)HrkFcwt2?n+2W<NQD1W}Umc-4`u^Xsu+nXc<a!-6>X$~PQ*MvI5u#nfE*FyF z5l_9e%;(!U-g4t03RdU&NXw{?5!WC9uoV+L-vhS=AXJJ#z@c<2oK@zrd<BtBpZ#Qc zQ9uqzD=@{N{1sO~K$dYMm{taotr-Uw7oDa7=wLIN@DalN2BtfOWl8Rcpl|7IAc8w8 z8X|l{mccXf8=f_mjk`cJ-%`<<HSLkuxeZMy+PC47y04d^_~0u7-zchx_d!%YNMBl@ z0VHMBWV&vyG;?KhgL*>lgmQ)E3zi_Q2{acwdI2t8I?tTS3cX-D&u1&~U_ITDl^pi_ zNis~54$DjL6!c^Z*&Wt6=cV?lTXTS#Dm9mkTgjaC>{@}+l7wqDF-da3asWn4>*}l8 zKS|_OSvND;r1pHw5>sX)kgG_ToO2BZplm25Nlv+T62Y+MJ?FUvt39@syQ^cDPKp{F zJX~3z>Kt1kDl=K-eX}zh$%!(rE0O|{{|)RN_Ur{r_bDtB=-AH>Z|Rak-w1SuenNf^ zuCNEeO>-!Xczyp4Mu%2S;92=jPz8ris%APZ&Fl|i;mIKXJni|c=oPBymIi;vQgpAU zQtEE}h0WyEmy4cQKMB41Vd$X@dvUCc@^O4vEUM^OE9XIU#mPSAhN5cG;N4B9Q0Xj2 z`*^E8hsQckfvXev*!bN9!{I%+kwLTW$)LUAzM`LZ8Wtb2D*QE9rV7W(h)%N#Q8R<~ zrX5wQuF4H|eO_oempVp+ssWMfLRZTU0zH0jUZ260djt#lFrpFU-wr;etstZ!ZBzRI m&cEx>Q{ZqXj)9UmuFtlxkxp9&XdkcMypxaM$YJBc2mb;NH@h|f diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/latex2mathml.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/latex2mathml.cpython-38.pyc deleted file mode 100644 index 9a1214abba01eb8beb3d70987b3fa479cf833bda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15236 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 G`TqlBTBa=k diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/math2html.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/math2html.cpython-38.pyc deleted file mode 100644 index 9175bc00adb9fe3df3971dfea07162b8dac42bdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195613 zcmcG%2Vh*)mGG|_O;dHDn9d+f5xCGH#(+CGF~-=Y4I<7+?`bslXhwcBV_Rbj3>LB_ znFJDwO$;^xV=yTs*#PMql57hLTe5AkEo56Z+q2pIqHMzVJLldvMV1Ns<^R{{+<VXM z_uO;O?f2c**4Es>-<u!0{e#<nKiKdCL2Cb^Ad7(fC-CPqIDt$<!svlSK=EKAsCr|f zQT0$Fta>C7Q9YW7x{-}BC%7r>t-+=-)70ObXbv=FTNP_DSjA7lZB4WR?QY}7X^H7K zHaH<CJlx=f-5I+Y6EndhP82+<_zB=KrwP1C@e{$DofhyG#ZLlnb=tt&6h9ff-I)eH zP4QXa)14XMGZa4se5P{(_z8-i3Vxz<68K4qp9X%iGYfo{;-`b3;+zV8s^VvWpXQtn ze!Ajkf}i1>34W&HXMvyPoDF`q;%9@$opZp?Q9KUb;hYP8uHxr_&vwoOKTq)v@bjGu zz%NkzT<{B>PVi2}XM<nlTnv7(;^%?Sapr>0Rs4MLdCq+B`HEiveu;A__@(Xz(Dy>{ z%bd%>FIT)1{0iqv@GBL+2>dGNYVfPwi|~Ij_%+V^z~86tbHEok*MeWG_+0RX&UN6| zxfkPq9{Ban4d6Fu`t!jTIg7y;yYq3s1bm6J6nv@Tmx3>ImV+->{4($r&W+$Vx|iYq za`2m+mEbECzXJUI&IiChp#HA}U*+5kezT@`75HlB7VujXzZ!gvb1V3*ieCf1)>#L> zPVx7FuXk<(zfJK4;I}(>fZyR>L;BZ(-|5^1ewTYK_(Jf6b2s?iieCrb<=g{)kA}Y< z{DaO0@D1+u_`d=CLrxMr>D~ao2)x_r0q;@w#o&(Pg1hcw+?Rm&Iw|m!x-SLqbJE~x zjei;VMrRZFCZ+#!@Ql+B-tR6a{0i`_lLOCb_#43ooXy~y-5YVg3EXq?;CXim_)74C zQv@%n`}@JSI9tKDD*gfRZO$P0pyI2*OU`!i?TX(FzQY*;A5wfZ_`S}3;P)wh3;0gw ze(?L<TS#vW_yf)^@LgJ-Tfv8&2f-gyd@cBhvm1Q3=6@ad9%mGMRO4F@KIV*rkE{RN z!1p>2fj^}9?e6Wn8r<7A+=2avosVGu5w*V){9)%2@JHM`$;VybA9X$k{xNk=fIsRy z2L70v!2NFbZsJL7=mHb{9^4;yp1}PH_5VTeea?RH{hH4W;7>Xq2miR@9|Aw%JO%!g zyOj8n;7>aT!4E3l4SvXZ2K*Vtd%!>8JPZD;;tu$8&SCJwio4*?J4e8eDBcVHg7YHy zi;Abfk2)`bzod8{_$QrDfqzQzH29~T&wzhM@r~dwJD&yrtn%e1@XtA)2mie0KLh@2 z&KJPHpm;y{E6%InuPUAef6e(K_!kw=fq%*QGWeI>9OWGV|BCZf@UN=-X7H~$UkCrX zrtg9Oy7LY2Z)o~?@YkJhf`3!}7r?*ed>j1RZh`oU;J@MgCiri<Mer@)zvcWk_;0Hm z*b4qT&Ue7SqxG{5{0--K!GBlrLGU-7x4_@h_)6fv=lnkS?<>9?{12Qz1ph<jvmM~y zb^ZwakK7%kHw6C2&Yyt)i8};-FZiE2e+K?%ir)ubcD@JxJ@;PRcY^=9^B3TMq3-vC z|E2R+;D4p~1K@w{d>{P#ithq{+xY?b4-_8;{~PCT!T;91pZFehZwobS9C3HJ52S)u zHv}6tjJP}9d)@op2i;+JmwR6->h9PuLa4uU{+>{Ouch7%{twO%!GGxPCYC+m|LFV( z{70I~DEL1){|x@mTFNo-e{ud5{9hFx2md$c-@*S~{qF_;59i0=KX&&L-$UU4>HGxz zCyIX<{J)(42LErxKLY-LoS%aKRPl$wC!C*w|4ie1#NDB#dL$JvWy1Y`oS)<Vb1n5p z!GGbr1OATUAG@*PVMZlDU|3b9^`mMV#I{jw8{J3A+hb}Q!Zxh7VfR*SA6MH5wo$c> zYP?UVZ4BEcwQW+r`_#4>+ZMHL(bV?aJb%pnsQak<L@H!!V=X0l(tR9hv2Ry{t)nM3 zhE`%|(-_*cRz9w_?buFJ+i6OR18O@R+Zk#*!#zNLpHkbI*q)%aX4LYu&BIewy5ZwQ z;3V~RlJ*S;HSEdQ&QjZ1YI{g+Pr>$7wKe0KXVmsIY)@C)(=|_@P}?)GJyUJZ)VA@g z+Mb2&*=l>X`h8Aq<Jg{~w&%F($p2x>x6k@HwK;#z$MN3*oIBi*cpiN=a31C(?hBaC z-xPef*?ZbOva2D$*mPaPg%<=G8h$7P*wrrvf7pobVbRbTC^v5|<_hkHflM*qBkr|- zL6Aj2egMU7kby0O+5iLEU?K#Bfr!(Xh?=2jB4&o5i6%4jOf;JzXQIUnH509Fn;Y8| zNW{>a(3{Yk(VNj*&|A=3(OaFybq$^E<?wnh+2fX`Eshs3q_e4bPbQhquUOq9IrIO- z90HaC`3{sq!^VKuiW>B$OW_L*hZ=VT3ZaeRXM%<tox#$H>-utA<H@+=b{A9eem9>_ zrrgz?5id*(<tDZ6&pB?nX>&2{7StHZ6Q<mlAIz5{`GS)x7G4aN8+$VOa@0ofVuROC z_=&~y3;hH02hsy`i`ju>&nDNIyS2}CGjlgw?)AHyuNs{1<a&yQbS6LFsQt-8-+WOn z>nrqU<_!#%!<vOFq)-u*hG1(T6ezVQN#?2B@u_eb{*?;Nru<MM4&JD0a7SQP!%zUK zgrG`zV`K`d2)*4ZRia82PbNL($bjeerni;bgczB0*3AoTyclj?lPEHA@>)a@QW#~L znA%Vl0C}BS1tXNFHP9R=wV5(m5+1))mk`zo__?Q!&(b;;wPIUW(?PhXv2>ED>1^Ef zyqxD3sua8^?pL=rL$Wthlu9wQh6yoMNy=f3YKfFZ0yG3;rX;p@)b;q~IE@fcA7LzI zc_t8OC<LA0E_CJlQ0d$$a~w}*op{0Z`qSBD!7W8sEMC8O)q?mB-{Eg{XQQd26N$SV za<`=mQ)j$4Sx9D9;wdjprXko~VJUU#5z*lPiMi6S&Ib`fJAq9N-ibQ`hsg3XfuX>T zppe{YGzD=&kUU&E+Z4d3b)1$G&-K#Udis*ttef$q%}#`ih2FW>lmpGHJ44Dk<<>2( zmrv)i8`9a{Tsh)qd!z-1w|eP<O9@*ErCgMV`VmcHF{zE!fNe6(!d}gWy@XwnDX|S3 zvdMmT!-jJ6h7E9TF(c;I4I4HWlNsw0-LQe?xnYAR4Ntk=Fo&|qbUzcG(At|NiX>ZZ zQQ_3@7W#5d4eM(TmH$PuTnyyTLWu=J!4NF~H5iM;VzFo}j2<vQt;`<0)%{8Oi-7#& zDE0E#X%rcJpb@#uG63>d%weZVBrwo=AcUlDlPNyxG@06?PGd?h_z5zV$8_?6>B#a~ zOx&5e6Fw$Wc3jTT@J-H{GDT-vev)&J({Uhzd_R{-_({%r>fYj<Pvu`wp0*_2y{<5r zaq~-a+1_+&;$ov0y<~y9H8MQj>*f06Zf0<s>&@#?fAQXQ#w`ubP8Ok{m!B7(T}T%) z?!5TI^!2kh=89f6nOQhLef^y6@$Iv><TAy6cfru?0mOEG&QN@Ie=b|-i_ac(lis}T zaVM8v5TA`YZ)kh`wzaF`3zP9a1lM&Pvx{D)<9bmS&QD%1&a<=hfb)h*(`M%-k$(3= zjis}+u9_FggJwr^K-LC|-I;X0&-Lb1l6-HebT&@J7A3txx+mk7Lp?BdIqJB*$zrBZ z+E-1_mVNu=!f&5bDg4m(3ukAG{oStDIW)AL(kdy2@S)islA^s!sjE&xcPTbh@r{#7 z6P>-T=*_<Cu2SKbXHhD{)<QLnV~AdL^3!~m<h`0yHR|K?MtouS^_Dpn&hNgyLLrEv z<bgHbTRqiQzA27Y#gsho-XpEBn5`rP-)!3QM0inmF1N`$53?tdw&<exg<cSUd*=be z5O42%YR+Vqpgjx>2uu1c!4m&HmUH9wYC1!8Y`#5y;cVAQ7jiJU>&)vMnzx<CQssQV zp5J>5yQ7*^T}r=l#P=O1;_dNtR_P_=t<>Ey1^bmtR!sep`l?I+SFEwV;}mu>6{#%x zJior2O1pgT^>yQMQu^Ntz2Y6eggmw4y&^r{BLhcfr?ZZ`t#i6ICGP@~D#f%tW!yrk zWs&qQuE$t{G1H=SR%&9R4MR^ZlW}{bOPXj09q@8JF6^F7<?+{_%rYJ*wPVOL=E@iP z+<ZD;3NPwU=X*-ciw61}Yt_1_He}19g4;t!Gm!HNrPf7^{%uF$R2z3Gc*6~4My842 zU3Vp-w!2G2ZRb<Gw}w`8eo51h(+|@0O>a0Sp3Q-nK4DI+Q25`Hw9@ezVN+>1ze>kf zTyflT5$*p@W^M8Ll8~A?B=DqB!tp!Gsrt$H$ZB2HbnE3;tyrYl=~%=UkMFt1xwjg7 zrBo}Y5MOaR{(8AgQa+z~2$%oI^rskl8M4+1um4{NySCB^&5IBDh5yw$8>aHowW>Vu zE)-LzD3vbuy^J&sUv9s4d;O@QcI35vf#oOq5E)u5c(*Z^KhnJAn3`r(SFJ%vP;C$I zDZ&p;j_}&!L|E4&*s<|@Nnv$ot9Pc*Pv$P(*`mZz60u}=x3`4}X*rzC4D=-vEk>R> zOi?e>p$w}(W_Vjjrt*nM+I8K6R}K$klId)sX-g70Tx8le<%~&IbM6N6eJISB8iN6T zKaWJ~^g!@`A~CfQ*QtO17CAA<>TmF!NZ9(Q4>J*I_U%1M^_aPrOokT$d6~T*JNG&u zD`H{hKap}P^PlzZoo3SGos0LMNZ_}3K3WdU>kLi==gut!=gnK)8J>!w<rtkuhSis; z=a6%W=^&u%4oVTq<caMuIo^roA|QX1rM_cx?1Y&qnz^FP5`)YW*$~zlqRbB2>^*P- zWs;fU$*D$XRw^K~LY)z^acgIS%mZ}}c%E#&%7&|KvdYG)Y^KTvs&iTDbmwxNi(a9r zT!}eCtXIi)scexF<JpQ`#RlnB&b6{F%2w#<&JD5wDx03N(J7movY{!Pn6h!nW+mH| zvPH?Z<hjl|*^FcZ(u7$|I0<<h;Uvs5!b->`sH>ejWMh(4*p8GfNZEFD*lLvRMcGo6 zZA95R<i~~~WoDaDwg%Y_yo!0R<Xe7c^4rYJSj-;K;pAmQP&NV8?kXsB6<dJfKB#IO zwFGQ;b{x2mdG?TVZ<@7G=RVo!O9e4EIS;@=yUNqxodV6n^=g=?)Y9c<oei1fAgd`8 zp|0+vSBiG!T`%qCOOb{1d)!QBVn&xNjHKKR#jG(n6Ok?kIytWt?sEGF`at`baAiu( z8e2M>XN=UQW?7N!ce4zc6zy}9EbEoR3+H>etpv;WB?sJza92KEatWO;c<D{9WF^|w zo9s_#21y~CD`q=SD2Eqk(y45@c}ddqTxY$ztx%3F$z_Zww3LjN+m>oRm${75T&LV_ z(3NDz6TE4u<XJ<uE+^Zp9P}s_zDaUl4vWu1IkHNrQEpl_c;|{7vv^O9H)+<(jcZx0 zZC)q&wwYK*-Zh%0b(;NKiiL8sSgg<zl-qA-sF%#73(35Cn<n0}sY-Q}V;J*=WVTSA zwj$^C7c)uU!n=s3R&H4%V$J5Nd3`dKGD&-~?pcm5O%BL-)B6CJw^)=_qFgJAEXsL{ zP|C4YRN*SBzZ|uRl%q>nkljRyqid5}C2NU@NSS1++-AM3)|G&A>td0@OLP4UV4bqi zt}y6h({IVTYm#2Fe+Aqj`6#!q8|?4SWh!{9(!zIbT>%?b+-49>cRC9>DpoU>xji{q z)v2-b^J8Kzx7&={JS3tj86Ee<#&R^7$>g?D*^!=1E-RHzxhN*}Z&{GN{Q*`t8YkMi zy4_SdyTMqLS}m&FTX8fk15QJFZd#Jt=3NId6A?J6*q>$J6r_2X#<(gC_sVcI0e3J^ zUoY!S30QQSvK6%T=$85tEzmfV&MnUtyg@^7_s&GSv0Mt1C=DCw^b@Tsvpt!j<C^fz zYv7u~N|}|E!>f|rZYI$r^=VvZsO#z+ZH*PfLeX;*GiotSuH3ZNwX>GQwDrmEjC)J3 zup#X;pJ-gZc73^NMaH%How?fG+6&KQTxV%tF}sPNiP*Zd<F2Mjz(jbIOomrva!EKx zihm0}q{Yb6SDA`dUcNcm<K+_JmHn(FB-%Cq)m${KWKGtTpq2Dw<-dxpA%tS(kffPt zSwr(K<odN0wcjdROqE8I2y1x~L`WM}A8oWdT6i+Ej?EG`5xT=m4kV(IPgpC_vaZKV z4?s_8@?rJjEz^dwxSNWEV-k_Yx@f3<FEy4TeBWSV+9bM^Tb8+bjSJ>a#3cTe1-CyD z5)<hS(rL5a+`f($?j$|Ov}5wC{LzB@8qZDkQyJd%r0?Az%5qVbNOoE@hpXIds?cXe zlE;=#St2&g+0v~X#ULc}7E0ioBybyvdWFRU0|@!_Ht+q|b>62!r4%}s2uiIB=d)T` zNOmK1L@bNEFGUw3++puhXdzO%6zM{ErLx}TgqBv4^w{4rYl~6EvN@WTX-nNXXVB{v zkJJ3t<#zynbF*E*Nwv)_zSv8dZen_!HI1iqLcNVPqSA?VmR16m&Z)OG@=EC!?@o8K zD%xL)zpIymyRFo5d><^VYV$0eb$mav9{g?@VTnN6bm_d~N1-bZ8wRAgm(D)Ew~WYu zcgu>jrqTt+k05KLg-z-FU+PiCO6knw`;(%-i*q5@Q>w3DL{4c&U3?-|N~axT6;}}? z@t<+5+s#Q2IW9tHs*obG)UBT5Bq5nvm1a(g5NTFA`B*z?&6D$rsGG!zR_2vXt&gBa z5|-+-aia*8bWeU#HdIVbN=`)OB+gpJglL=X1&_nxlf4Lw*RyY(57|3-w?xD}$*w{@ zUmg?1z%TPqc(+7kx0<#6cZ);Y$h&zkt)rf)>#}LN-!S#Lb@f%}kDcj4VNh6a_Pcqa zv6?(x{7Zb*rCZ-x>e7`IJC7e1GCSkudV6g5J*nN*#U!MBmnz>PDb;hOX;Cay*2`Jj z(;RCny9ATCReJ16vip{S0&;#*Xxpbx@~WMCev(&uc<rX@C5H6%lS1FF-T9;pN%udg zm>Dw`$WIDxdh<ywGB1M&PgdkB(!q=k<NkP|l3U+iM-LT|WNpnr&x|E1=~_1xauwNO zEo(*>rCF9AtkZH<WnG5KZlzq-K?Wc)qw-~&wN@GC%QoL`@Xon1K$)BuopVessy~LA z>{-V$6MmOZi_!56V*opGbj*wl>2EF4c24HWQ55e=p=!ICQnI(g254F)j5@_+`I%mf z$s`lD%DAJ+pt;`OQp_5&3{BKeA(vvzTEYtxTOE(Q&x}XRgt8Jxo1J0C*)vXNy{p92 zj4l-$Thpw=GYDjy$lNr;Aec!p+nEf(n4~gb>P4W_O~k}3z3fD+D{Drt*kO|PFww-! zRYU^4c$-dQD@lt>G0Wiv$-XgWsjC5|QOXz_gxN@(BAKapocWXkIW6W7zuJ9^epYUa z{od7vjykEXNzCBI0q+`dCr(%cvQmT$sWS8Q3LA308<KXIsCIT9UWuixIya9q$7|J4 zJ!XV85$GyM&9E+CYFSt_pln*$>#BgwukLJ~a$zbeBU5%q$}M)DM*mbunCN{cjzy70 zJsu@hQVy%^n{sVW&L}+(<X5mfWmmEStkB8&ov5-}cdY5ZBW?H%TqA3M;{J<Bq~f#c z-w)@<HT9Zcy{jMk_<pB$k#Oc$jiG9)b*uUklkewO)1QxgkeJ>Hg@X-|cRZo#G3$VG zYG#oT+Ce#H9Z=7WIFSQk*81e!NR*X8b819Z1B0?2c%X%oB>tM9S-m@n)vBmm_^3T8 zqAOTuu!40a3lI4omR*?haR5ZuKy@lp43h=6v>uJyCDHv>-^XI;skoIw@ws#3r7-H; z_(b4>iNJ?`62$)XL)PP{Hy_j@&ljWW_V(kizJ6#TFn1y_-+KU?&K3l`PA0T>iFav_ zuzjd>N}X+?57{Pt1ukv1F89)Y*A2Km>12j=DKFkN7jal;v1lH0yv`=$<O+ErI=$YS zNq#Z!inw4KoerihOg7hz{N3av^L=wC$Cu}%V;}Lw>w`#}qb(0?&3R6L(%ZCsXrh^! zUC$=<Ukaa}>>s$c6godsxOO6ReyVUSt0#f;Cjtv60@qIj=U?wV0ewo5^RwM~{6)@p z`$dnQf9^GxzVB*0dmpZncb6ga{Rh1#tCkNQPdtR_FT8v?W+e?K#A&*~>SQ@2qr`Gk zI-k4dnk(OT>6PVXdWvE;EvLJtlntY#cOGIPFY{_E8$=$M_50cu<F_MOzpuJ$d#Lz+ z$CLPuX&38YtVKBF3!JMurd_a_U$Z)X%-XnF7l;2()Kzh_E`GXPX?pJ~<Id%Bg@_el zvkuPnAiMT0tJvr13U+1f`@l-tXJ!4H(_CR)1HXlpd0hiXUngte=v>2b?nJ-KtZ=77 z&ONN%e-MmyZm=X+_kkFz@T_;Ig0kX`nqmhds_Wi;sH}V=5n`3K?|!)qBNt#;<Ib?k zonu8@R=T&L4$8$AF0<spxYBaqRMxS%$|9@UTv=J^?2?NraydmVq{t-{xp*R%OypvT zTqcnVByveaE{4cu5V-&%mp&XWddTGtxzGWnxW*w@H@L2GrSp<p(vXW8av4J|U~uW; zD(4GI$yeA@cvUW0$i)h|Od%I2xHPfA`G#DT;CjTh&bPS~vC#QVR{gmQ!F~f*AmrME zTy>D^4RWPHt})2f1-Y&uR}|!0f?P$A>j!e>fIM^2K&}nQRROskAXft98h{-Am*f6& z#Gia{uwM@I%K?6eL;7+spCj6O3?E&O-=ph+d-RC&1Jo#>$Li7bAU(Pshey`~@aTHv z9bFH(qw6ttbUnC^u1D3;^>8}69!Ez%%Xt&^Y(Nj4qw7I(^x4kepq>Yu4_p9T2y|Mw z2>oJU4lvikJoNd%CBUV?Wx(am0n{siD}k$ktAT5P_W=ulYk`Hpb-?w&4ZtE`F|Y(! z3M>Pb11o?Vft!Gp&NHa*2R;C-0&WIY1GfNcfLnpJz&c<(a2s$taEI0JM86A20Cxjj zz&*eRfepZifF#fj^Z*Xv0=+;A=mXNgMnLR00U4m*ITbYv<bVNSGvEPv=XBHpP;~wU zbqlZ+*ai#&B@5fpcK||{AwY6^FK{2Q6SyCE0N4c#0}lctz;0j<Fba$T<5u5`{t)nC z;3L4pz$3s%fsX-?0*?WY15W_^fc?Oez{i0Dz*E4}z(L>;Ak_Z^@GS5ga2R+VI0C%j z{4?r{z)|2O&G#oUeG2$A@EPD`;IqKzfX@TJ27Cc{1$Y&B4frDPCE&}zSAeeqUjx1l z{5tRr;C0}ez_$R&m%z7y-*CQz`kTOS0ly9W4j^^{Zvejwya~Jo{2uW8$SI+)#2|Km z07$q$1ilOW5%9;rp8$Uf{25RNz6bm{@E5>e0)GYkHSm4lZQuvM-vECL{2lQ3z&{`@ zgn~Z={t@^Q@K1oy?O)W_zpB6QC<p!<w*T(@H|l=?KL-92_zCb|fY|>Z;HSWZg`c7S z5Abu~7r;C4N)R~{bOJySXaqt)*g^z73dDdWpc!ZZT7fp89he482WHghGclh4oCur* zoD9qYP618@P6JK{&H&B?&H~N`;=nmT2XHPh8#oU*AGiRx5a<Lh0>u4dU=A=Bm<P-U zE&(nDE~DOp&gH-rz?HyN&Oe}D4O|1f4_E-_2az^GT2&Bf6GYkskv2i3O%Q2gU<vwC zU>UF+SOMG!+ytxy-Vb~LSOwe+tcJEPqhCqw2a!BMl{}Kdtpe0>5E&Fi1_hBpL1a)6 z85BeY1+`TR<=WuoAd)CZue=NOZlDXeN4errOdkX`03QO9KsV3>IDiZE0^[X4gB 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 PKUpD;lHi<AeCpf3Q#<P8 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/tex2mathml_extern.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/tex2mathml_extern.cpython-38.pyc deleted file mode 100644 index 290cb863d9e3f0933ff6f78153e3fcccf4f7ab03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3344 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 NyKTR0w<^Ri{tI<GY5@QM diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/tex2unichar.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/tex2unichar.cpython-38.pyc deleted file mode 100644 index 15f92d03456cc9c261298cd3a7271826a642c7fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14152 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 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/unichar2tex.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/__pycache__/unichar2tex.cpython-38.pyc deleted file mode 100644 index c654c087b71799df591c41bc4ae17e896f54d279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16724 zcmeI2XM9ve+lO-?l_Z4FyP+599Yv-0-o>M^n|qTiY<4$W2qXr3Zzx3+MFc@9(wh{e zcj-mf$6m2MKJR10_Wu9p?9NX7=9l-&EBvl&@0p!FXU^<BGiP@*Av3d50{)$vHu1J? z{Sy*CW<md#Q86K*H!6Y&XeS9`NCl}ViIODAk|L>+CY2;zG9*(fOO{lTY^f^Mq`K6Q zno>(@OC6~z^`yQukcM)N<VYiFEKQ`TG?V7iLRv~IX)V`E8)+-;q`h>Ij?zgwOBd-X z-K4wpke+g#Tra)k2DwpglHSrs`bt0PF9T$t43fbzM25;R87?Daq>Pf$GDgPAI2kV! zWTH%x$#Szykz2%+Tje&HD$~RvPRSJ!m*h#l6o^}<%M9^Ip?Jk7ekqcG1SKS4nJL9G zOJ+-nl*;W=CUfKtxl`_vyX79aSMHPh<pFt69+HRU5qVS|lgH%=nJZ7qQ!-EH%K}*_ zPs<{CMxK?$@|-*`OXLMvDlf`1SuQWh3Rx*H%PX=<R?8Y$E3e8rSuY!8qimARvPHJa zHrXya<TcqTyJWZQk=Nx7*(>{GzZ{T*a!3x#5jiTy<hY!Wlk%pVlGAcV&dNDCFBjyZ zT$0Q3mb@(yc}M;w@5+1fzI-4b%183Cd?KI9XY#pxAy?!}`AWW)Z{%C~PW~<5%YWp5 z<iGNR{3t)k&+?00m0#sI`Ca~yKj#{f01Qw8R0N422_%CQkP6a3C6Ep>KqjaRvOpD( z4XT1_pgO1lYJyszHmC#Yf_k7nXaE|5Yd{WY1R8@Tpebkunu8XgC1?d&gKI$>&=#}< z?Li075p)8bK^M>!bOYT%56}}_2d)RbzzyI=a1-ba`hdQmALtJTfPr8T7z~Dhp<oyo z4n}~HU=$b)#(=S492gHKfQeudm<(<PQ@}021h<0Qz*H~|IDix60s$_N2l7DyaD(Y! z2JnDF-~~S52Sp$Nf*=IKU?wOAv%qXn0!qQ{pbX3bcYr&=UEpqT54acH2kr+CfCs@t z;9>9xcoaMa9tTf=x!_6g6qpC*g9TtAcp5AM&wyvaV(=Vz9xMSbfTiF?una5*FM$<c zC3qRU0#<?5U=3IcUIpvGdawa(1e?HSumx-d+rW0P1H1-yf?Z%Y*aKb%Z-BjEAJ`8L zfP>%=I1G+}qu>}g4o-lR;7xD}oCasWS#S=V2N%Faa0y%nZ-KW#1iS<O1>Obkf%m}& z;6v~c_!xWwJ_VnF&%qbq3iuLy1-=H~fN#Nf;NReT@E`C$;J@Gp@FVyM{0x2pSHZ8~ zH}E_71N=F+0_J}O%>N3Q|JVmWB1i(sAO)m?G*AhogA9-fDuXOg1!RM&pc<$SYJi%c z7N`yCfV!X_s1F)|hTs~I0~&$Gpb2OSnt|q^1!xIcf!5$!&<3;x?Ld3b0dxeNKxfbe zbOqf&chCd$1lNJ<K`(FvxDnh0dV@ZoFX#vQg8^V57z74`Az&yN28M$XU?dm?MuRb6 zEEosIg9%_Fm;@$+o52)t3oya0;5IN7Oal(!1i3(f3*>=(PypOuI+y`Gpb&V05BNb5 z2!J36fiRc}ioq-}8<c=ja62dibHE+oPH-2v8{7l#1^0pb!2{qy@DO+yJOUmCkAcU* z6JRcQ5<CUwf%#woSO}g5i@-DBS+E#92c8E@zzbk0co8fE%fU-v1y~7Q2CslsU^Q3+ z)`C~TI<OvW02{$3uo-LtTX`3Q$8BIc*a2PxJHaln8|(qEgEzolun+792f#sa2pk4S zz)^4v90w=<_I(gX<D`|ZZ(139%F5Z(s67MDf^*<JxBxDKOW-ni3%m^?;2rQU@Gf`{ zybnGAAA*m-$KVt2DfkS04!!_az?a}F@HO~mZpG))rz9Zyc3eWs?<yoDTs7vDq?&$T z*ek)Dk|cAs%gYC^D?g{Cl9}rc<a%5(Hm4-f^cUuoq?jRhq04IM3Kg)SxM#B3UFcvr z#he}s2001~9jxi^@`S8le1VHWsyW<I=oCbW=43ZL8cs3Cx%2sgG;@MK==S)mZj3I# zQ%UCNpw(hjp)21ylEdRKK#*)Yts|zG`LUCUeX<O5rX%2r9Vgi=vDzh>(dHq$C&{MU zXLoIe!|%rdQ%#TRT49)7^ID!|b<=P4B~akw$l&-vyTd7FG)OW-4m3|Q!?6>mvYFq$ zhFtprPw`@X_N7?IiS{PRv|6TEuR)_UjBWI~GEJu=cZPO7MPY~JlvFftXP?E9pYIA- zFNlRHrbm1syiX~nKY({ErzG7vM6^)RypGqvx60`(?N^3p8Rt4YrGv{#GOR*gz%hd* z)eLc}SrGI%f_S6jFBnpWVH$$mh*u3S!+YlPc(ikjWUFGoRx?^V^ccMdW7%{px~$HO z8Wm6Bu?zVgXx&6*{Oo<pT|v2v8=$uvScU`|==LIi<1Zdjh9Pr!Tz*`mm0ng-=VJ(Q zH5_V>mG|kU$CVdy1OmQd`wfqV8D_wpUl4mD-4tK3H~Lf+>m~ZrnMf3^L7M3;R!8)@ zR2bC4Sc44Ht92mL^y<g0YKDq^1ulnZO{&G}^oCjSs|Y#VxWFn}_wAZg<bppK!f<Dq z1wP*l?T}ThioYDs=kr?~XFDFx6RWV=<&@Njk3z60jQqBTFx$Q!{a{Jva3)%kIhGGq z%-nEbracn&v9q<B=)qBCtyfwPs_IqIX7*(lU}pM!-Y{}9+v-%bg6{~=7se7}wNS58 zHL;7cp3#m|)gHcb2dZl2K>0&u>vgfKu@1(9)q6}`yH{3qtjf+Iy-^1G8McQUFNt>G zFR$ShsXRlgYVr3V+Aph8bs%1eG#ei45j$j+;z!RZLFSDum+)G1F67a-H^VI7s=q!h z_>%I+oS;vO40E`;V4iTS-ZtAFaXpo?FiC?2+Docf75b}E%{*Vg!SyM_%=H!eJ+4BR z7wMX2qQfD#!<y=@S?(ZLP)y5MXzeOqU#P(C#qOA5dL2#=c8x^Sjf_Fj7h-@-1FLs3 z7G59L=v17+j*`q^xG?9c(H1QVk#$(#eIdUmjB{WMv6s~>Ggyd@1zn*+x0lZ(nT{ZO zmTaXlkLC<}umrItSQN1O%*R_g-^v48VHbqh(E~m|r!BT-Z(e9N1BW-?gJm_#EOa@7 z;ebn`6;;fjzrYo6WBHHPV1;#~@5!dudaT58LASUDrkmb)A;m0qNj{F5WX^P154jFp zSrVqE_2A~HVwbfZ(GxpJHhoq_x`~}H;KF->m!@Ga&vk@@E{xE1I6}~kEd`a>_pA`R z2evr$$SS3nuA*pw2UiiF$@N9w6+1{Zv8M-ov$&7g5u0HYg0ngLsb=4Bp`TS8Q#(rG zJ7Tx$ZwFas9<Cd2H+NG$QyB>t)XJ&o2p1h5hL3E6>k7E7kwk&FQg~p8!@N~W!sN56 z^ZAg>lJ$t9)y#wDR*-K8i6-+j(acB2ag0L6F5aOb+dQry5(FcXAF@ZrIxx#TavF{t z3|eE9YNCY|*_BrNG*-qA;SacQ1xTrIE*>+HJg!`<x1QNNQl?d{ikKvLHhMU|zzWeH z`ydGHqom?xP9!o%CWt#CMwOy<JS=0@GDcF_ja4E3jQxZ)i0RRnL`O7iPaYhoD0V74 zwojI!>UmVV6gw;?T#=QkR={M%Et!3|RNR}{a}QDUZWmE>f+Ba33LKQ^t+D;)V;!;Y zl&#sSp5#hoy=}f(vA#Nev!aKuWFl54Kx`ctw}1Alkc@b>l`$coHJh9~F*al$ZgQ<f zV`hKr_$lT@`z5L7#ORAtO|KT&%}}S>c_-R+*}U0|Wh>WA?jc&0wQ6!V)Z1`4vsI1N zgjKjj3wv-qTmdR!)d{%*SW(zxtPM^FauiqW2t-#5#P0lPj2Y<8w-yj9vfdaw;yc6p zU`L_PYb{8*)*vBMu}yL*!^aP|xO`r19E(G4tS7jYS9Ms^tq(2s_8BS&xLnbi=>DNs z**D5aYWte3ytn#>_n1>c^?961?{U%ePBQ!1%U?hCJKglVL%9W5-e$z6qt$t9I$9Cd z0#5EEOm56>-cts#$XL@eozv4*WKU4!lRX*jDW;0{M8gKfdUh8f>loq_Ky0bZw*#!= zXcmjv&W^K8um0}x-BuOR_a8gI-h{`m8n03rz}$^~>frli<*390Pp*r%m?<U}Nd|a> z@^E*EcQMrrM59V(*purEc=>4taUdRhw0e)KPcidw2W~Bg!9q7Tw{+7t(-m+A9Jwgq z=Ey6ml*KHIU533s1qzT<*?PTw_lGxz&!n0CW0{AQ(^ulc(#r1Qb_1U-xd>qY$Nm&8 zVtIDw+lh&l%I^?YFzm*RN;h#c9thcm%vd(tMSR5eAdjqe$!4C%f%bS89icEbT#i<d zcVj$8Zh<RzMxnz_Cfp>1T-YnIX8T=yo}XOp?H!}3B2Rw6$16o$G{U_vw#jmLN35{k z!syLfb=5?#%`%7o^@Xg^n^ad#^x6#TaIsGjmF*!@gNX%O-RoH6XD_eT>JVL!F(KXg zv6a|*LM{9p?;`77Bb7H7(c6uoxV_-eIWS6?SGfQ4g`FNQL2B*6R*40jcPEuhY?sj( zUBwKH-8NWLFjl}uZS6YACii8&%;SwcheN2?J_NRKYZhnNvsg{z=$Y(Uoxyt;cEW1P zJ2ra~bGx+XaE4VEI}LU))W=HpCaunEZ_=vBosyfcbuSUyHmw4W!e?+5xD1xKC)%ax zhwQx4KI#K^UMW6Kt9pExR&jqV#^-8PkB`+V9;C(buM+Y~@tuKcGgOO*X)(S;P;Kz3 zT*de%LB*rAIR1S?UMap$P;KI09^{pd)9S}-@dPcNsKt}Cc(NAXti|~5L7mH?#ZE2G z)nd_Nmlo$~alRH8Xt7(1r)%*HE%s<}p%#0!*r&yQEiTgHfEEX}IHbj4EuN{x#acW| zi)U+bNm<0`6EXTmjD8WLf5aFNF$PAAK@nqc#26AWhDMBG5o3777!ff>MvPGrV|2tA z6EVg{jBycTe8iX#F(yWgNfBdm#JD+POo<qdh~bPFxe@%_Vz?qkUc|_c819HMJz~s= z7@mkx7%{vN!xu695u+$#1R_Q-VuT__IAY9<7{w7|R>YVcF-ox7#=Z{2Oo$iCeV2s% zk3WM%j~9^9@d8phUO?`~3rOC00ofZbl>0giIU9clNgFR9YvTo^ZM=ZIjTex(@d7e8 zUO?(<U!vhswNm+S(QvWabC~X02@_r`VI;H?hC(Z0EVL3PxK_dx*Gd>Dt%Q-%N*F4w zgt5{}7%Z)X(b7s7F0F*|(n=UGt%MQNN*FS&gek6-Fv+zNrny$aMAu4~>RJhtT`OU_ zYb8v0t%NDBl`!eG5~jUY!o=4~nEF}?lV2-g`fDXD09px4fL6jHpp~!;XeBHJS_w;m zR>ESSm9QLWB`gS92}^=jDp3oBQ`>}`+9u>IMJ`4cTxV%~<8hY8Hy&pxvQV{&Z#K?S z<fE!bHmW$j**Ht%n~k#+nWx$yw^WSGQZe#M#mFiZBd1i1j8ZZ3DcS7nbmCKiT^H0g zT*PX_MXWYl#Ok^ctLsLrt{btsZp3QCMXbgEu^I!!Y77voF+i-w05RsG>ZckH)MFm1 zddxx<s|^=z)R-YwV}@9b8DceNh}D=OR%3=3W2TO;HeA$WHmZ8H;i6t`xQH<iRU6Dg z6=M#n7&B1CYQx2A)rN~0b5FIw%u_Muor*E*RE#;NV$3)dW4@^vvrWZn!^OEU(^Ng? znTj#XRE#;MV$3iVV}7X^vrENlZiPbexrJEe8)B7jh*iEJR{4fl<r`v^Z-`aCAy)Z@ zSmhgHm2Zeuz9ClmhFIkrVwG=*RlXrs`G#2K8)B7jh*iEJR{4fl<r`v^Z-`aCAy)Z@ zSmhgHm2Zeuz9ClmhFIkrVwG=*RlXrs`G#2K8)B7jh*iEJR{4fl<r`v^Z-`aCAy)Z@ zSmhgHm2Zeuz9ClmhFIkrVwG=*RlXrs`G#2K8)B7jh>>sjs+m7A=9QY(ufckS^{cR6 zVf{K>hEHp;m)O4&$F>I^WHN@w-Yi%ejZ*vs*00B9_%I)P`2_n%*fM-dk5%E<<Z{Je zxg%J=F2@e(4*jLitSHxKR+Q^AE6VqoHSs>P6z?-j<@(Huzx3I9MZC{eG2UkuqkT>@ z)o;VrFUsoYY<!g${k=Lm1|4Dx0!FZ-7I)I(&RX0>i@R!ZH!be2#XYpRXDr5orp}94 zofok>FJg6G#Ol0=)p-%C^CDK~MXb(?Se+M1sLqR6ofok>FJg6G#Ol0=)p-%C^CDK~ zMXb(?xMx|*bo_nom8JLt+bhed71Ua49kr3VO#Pes337KdpzioX4EH>|);*tEL@lP4 zP)n)h)Cy`P^$N9$+DL7pHd9-ut<*MZJGFy)joL}=qIOezsMo2z)IMrIb$~iZ9ik3X zN2sIJG3qRJk-9{^OZ`Y0IZ#b1hiXJMr#ewxsi{<jMo>DHL1j`|R23?ls!CO(YEZSQ zI#gY%9#x-eKsBXWP%Wu8R9mV8)sgB%b*8#f-Kg$V4{9#;B=r<EkD5;{pcYb3Q;Vo) zsAs9g)DmhbwTxO$t)x~_tEn~ATIyA59kqelNNuCGQ#+|$)NX1I^*Z$iwU^pQ?WYb< z2dTr<5$Y&)j5<!8piWY6Qm3fX)EVk5b&fhuU7#*f5$YZ4UFrksBPyXWWKb2Tic}(% zM5R!vR2r2|Wl>eAY^o|%jjB%7plVXJsM=H=sxDQJs!uhb8d5n_BdRggglbAPqncAK zsFqYKsx@^j)rM+IwWGRFU8!zVFX{%WH`RygOZB4$P=lz!)KF>!HIf=dji$y>W2te} zL~0UcQqw30C6tTGqw=W&%1uqDW>6l=OZg~2RYV1-AT^UJrb?(%>UOG(nnT?|-AUa= z-A&y?-A_G0JxD!7Jxo19Jx)DA&842Co}%Va^Qi^YLh5O15%mo9EVY<=o?1e^KrN+S zq?S?3sh6k~)XUT>)GBH<wU&C7T1Ty?Hc^|YE!0+O2ep&hMeU~cQv0a=)B)-sb%;7l z9ifg=$Ef4f3F;*ECUuHBO`W06Qs=1i)CKAib(wmLdYg(+?@;ei?^7R8A5x!DpHp8@ zSEw(kuc)u7Z>Vpn@2Kyo)Fx0GRf$Tc>QfD<hSW7wW2y=D9`!!8xf!&b+C%N5j!?&` zU#Z`yq~_2x%0W4)T&j@rQa-9$3n+)$PkljMp}wWQqkf=%q<*4)rhcKWQom7OwSs=2 z5?VtBRe?&RlBo=;0d*5~8&yWlq3)yZryiglq#mLkrXHalr4~>NsrA$bYCE-qdX3si z9ik3XC#aKD!UY3eqbg7psYEJ?N~Th%R4R?CM5R+1R3=rK%A%@J*;G}k8daUDLDi&c zQMIW$R9&hbRiA1=HKeYga;QdBW2y<&lxjvbr&>@gsa8~L>RPG|)s|{UwWm5z9jQ)K zXQ~U;mFh-yr+QF5sq3igsb16#)Q!|lRBx&e)tBl=^`{0<1F1pOU}^|8lp012r$$gC zsZrEuY78}&8b^(%CQ_5A$<)o%6zUerq;92dqoz{RC<o=Faw(x)R34R2Jx48}UZ9py zE2x#!Drz;ghFVLlqt;U!sEyPnYBRNk+Dau}gp#NfDwRs3Dp8qKWh#rRLS<7`scKYp zswP#7s!i3Q>QeQn`cy;e8Y+isL^Y<GP)(_3RCB5Y)skvOwWhA6+E8t&c2s++1J#l0 zM0KXRP+h5RRClTe)swoO>P6i^-AMJO`cQqTepG*IAT^X4Mh&M%P$Q{P)M(12mQpWL z%c$klOVkQ#CG|4(3bl$_O|7BUQm<0$sP)taY9qCY+DvVswo==u?bHtHHEJidi`q@? zp<bunp!QPxsQuId>L7K9I!qm*j#9^{<J1Z2B=shBiaJf5q0Un0sPmNn5>!M5s2~-h z!qiNvn3_e+rb?(%>UOG(nnT?|-AUa=-A&y?-Amm^-A_G0JxD!7Jxo19JxV=BJx)DA z&842Co}%Va^Qi^YLh5O15%mo9EVY<=j(VP2LcKsOrCy|#QOl{9s1?*|Y7MoX+C*)o zwo^N)-P9iH4Qem-3H2#;h5DNMj{2VZFZCn!6ZH#qmHLhPo%)0NlS;S@8B_(TB9%xb zQOQ&al}e>i=~M=lNmZt@s47%8Rh6nnRi|oDHK|%uZK@7cm#RmdqE1t1sI$~L>O6IU zx=3B3E>j;-A5))DpHiPupHp8@SEw(kuc#lXpQxXyU#P3puhehU@6;dEpU}uw#+1yk z*WD@Pnl&|qzpQkvN(l5$NU(LaU;9v@zrEk>ZyUxRAmWeVrEPJ6%jIc1wQ~S}s?%+D zd-3IlLvBy7y={Ks(H_Uk#UD`cnC<+tBdNXc$5UaC>&7%3H`q8iA)$it&;S3=BamqP o^Z%a__-6$EFGhgt%-=cB-(Qy!tuyc}fA36x>D8SH@&7;kFX&OC1ONa4 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/latex2mathml.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/latex2mathml.py deleted file mode 100644 index dc8549e..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/latex2mathml.py +++ /dev/null @@ -1,568 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# :Id: $Id: latex2mathml.py 8366 2019-08-27 12:09:19Z milde $ -# :Copyright: © 2010 Günter Milde. -# Based on rst2mathml.py from the latex_math sandbox project -# © 2005 Jens Jørgen Mortensen -# :License: Released under the terms of the `2-Clause BSD license`_, in short: -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause - - -"""Convert LaTex math code into presentational MathML""" - -# Based on the `latex_math` sandbox project by Jens Jørgen Mortensen - -import docutils.utils.math.tex2unichar as tex2unichar - -# TeX spacing combining -over = {'acute': u'\u00B4', # u'\u0301', - 'bar': u'\u00AF', # u'\u0304', - 'breve': u'\u02D8', # u'\u0306', - 'check': u'\u02C7', # u'\u030C', - 'dot': u'\u02D9', # u'\u0307', - 'ddot': u'\u00A8', # u'\u0308', - 'dddot': u'\u20DB', - 'grave': u'`', # u'\u0300', - 'hat': u'^', # u'\u0302', - 'mathring': u'\u02DA', # u'\u030A', - 'overleftrightarrow': u'\u20e1', - # 'overline': # u'\u0305', - 'tilde': u'\u02DC', # u'\u0303', - 'vec': u'\u20D7'} - -Greek = { # Capital Greek letters: (upright in TeX style) - 'Phi':u'\u03a6', 'Xi':u'\u039e', 'Sigma':u'\u03a3', - 'Psi':u'\u03a8', 'Delta':u'\u0394', 'Theta':u'\u0398', - 'Upsilon':u'\u03d2', 'Pi':u'\u03a0', 'Omega':u'\u03a9', - 'Gamma':u'\u0393', 'Lambda':u'\u039b'} - -letters = tex2unichar.mathalpha - -special = tex2unichar.mathbin # Binary symbols -special.update(tex2unichar.mathrel) # Relation symbols, arrow symbols -special.update(tex2unichar.mathord) # Miscellaneous symbols -special.update(tex2unichar.mathop) # Variable-sized symbols -special.update(tex2unichar.mathopen) # Braces -special.update(tex2unichar.mathclose) # Braces -special.update(tex2unichar.mathfence) - -sumintprod = ''.join([special[symbol] for symbol in - ['sum', 'int', 'oint', 'prod']]) - -functions = ['arccos', 'arcsin', 'arctan', 'arg', 'cos', 'cosh', - 'cot', 'coth', 'csc', 'deg', 'det', 'dim', - 'exp', 'gcd', 'hom', 'inf', 'ker', 'lg', - 'lim', 'liminf', 'limsup', 'ln', 'log', 'max', - 'min', 'Pr', 'sec', 'sin', 'sinh', 'sup', - 'tan', 'tanh', - 'injlim', 'varinjlim', 'varlimsup', - 'projlim', 'varliminf', 'varprojlim'] - - -mathbb = { - 'A': u'\U0001D538', - 'B': u'\U0001D539', - 'C': u'\u2102', - 'D': u'\U0001D53B', - 'E': u'\U0001D53C', - 'F': u'\U0001D53D', - 'G': u'\U0001D53E', - 'H': u'\u210D', - 'I': u'\U0001D540', - 'J': u'\U0001D541', - 'K': u'\U0001D542', - 'L': u'\U0001D543', - 'M': u'\U0001D544', - 'N': u'\u2115', - 'O': u'\U0001D546', - 'P': u'\u2119', - 'Q': u'\u211A', - 'R': u'\u211D', - 'S': u'\U0001D54A', - 'T': u'\U0001D54B', - 'U': u'\U0001D54C', - 'V': u'\U0001D54D', - 'W': u'\U0001D54E', - 'X': u'\U0001D54F', - 'Y': u'\U0001D550', - 'Z': u'\u2124', - } - -mathscr = { - 'A': u'\U0001D49C', - 'B': u'\u212C', # bernoulli function - 'C': u'\U0001D49E', - 'D': u'\U0001D49F', - 'E': u'\u2130', - 'F': u'\u2131', - 'G': u'\U0001D4A2', - 'H': u'\u210B', # hamiltonian - 'I': u'\u2110', - 'J': u'\U0001D4A5', - 'K': u'\U0001D4A6', - 'L': u'\u2112', # lagrangian - 'M': u'\u2133', # physics m-matrix - 'N': u'\U0001D4A9', - 'O': u'\U0001D4AA', - 'P': u'\U0001D4AB', - 'Q': u'\U0001D4AC', - 'R': u'\u211B', - 'S': u'\U0001D4AE', - 'T': u'\U0001D4AF', - 'U': u'\U0001D4B0', - 'V': u'\U0001D4B1', - 'W': u'\U0001D4B2', - 'X': u'\U0001D4B3', - 'Y': u'\U0001D4B4', - 'Z': u'\U0001D4B5', - 'a': u'\U0001D4B6', - 'b': u'\U0001D4B7', - 'c': u'\U0001D4B8', - 'd': u'\U0001D4B9', - 'e': u'\u212F', - 'f': u'\U0001D4BB', - 'g': u'\u210A', - 'h': u'\U0001D4BD', - 'i': u'\U0001D4BE', - 'j': u'\U0001D4BF', - 'k': u'\U0001D4C0', - 'l': u'\U0001D4C1', - 'm': u'\U0001D4C2', - 'n': u'\U0001D4C3', - 'o': u'\u2134', # order of - 'p': u'\U0001D4C5', - 'q': u'\U0001D4C6', - 'r': u'\U0001D4C7', - 's': u'\U0001D4C8', - 't': u'\U0001D4C9', - 'u': u'\U0001D4CA', - 'v': u'\U0001D4CB', - 'w': u'\U0001D4CC', - 'x': u'\U0001D4CD', - 'y': u'\U0001D4CE', - 'z': u'\U0001D4CF', - } - -negatables = {'=': u'\u2260', - r'\in': u'\u2209', - r'\equiv': u'\u2262'} - -# LaTeX to MathML translation stuff: -class math(object): - """Base class for MathML elements.""" - - nchildren = 1000000 - """Required number of children""" - - def __init__(self, children=None, inline=None): - """math([children]) -> MathML element - - children can be one child or a list of children.""" - - self.children = [] - if children is not None: - if isinstance(children, list): - for child in children: - self.append(child) - else: - # Only one child: - self.append(children) - - if inline is not None: - self.inline = inline - - def __repr__(self): - if hasattr(self, 'children'): - return self.__class__.__name__ + '(%s)' % \ - ','.join([repr(child) for child in self.children]) - else: - return self.__class__.__name__ - - def full(self): - """Room for more children?""" - - return len(self.children) >= self.nchildren - - def append(self, child): - """append(child) -> element - - Appends child and returns self if self is not full or first - non-full parent.""" - - assert not self.full() - self.children.append(child) - child.parent = self - node = self - while node.full(): - node = node.parent - return node - - def delete_child(self): - """delete_child() -> child - - Delete last child and return it.""" - - child = self.children[-1] - del self.children[-1] - return child - - def close(self): - """close() -> parent - - Close element and return first non-full element.""" - - parent = self.parent - while parent.full(): - parent = parent.parent - return parent - - def xml(self): - """xml() -> xml-string""" - - return self.xml_start() + self.xml_body() + self.xml_end() - - def xml_start(self): - if not hasattr(self, 'inline'): - return ['<%s>' % self.__class__.__name__] - xmlns = 'http://www.w3.org/1998/Math/MathML' - if self.inline: - return ['<math xmlns="%s">' % xmlns] - else: - return ['<math xmlns="%s" mode="display">' % xmlns] - - def xml_end(self): - return ['</%s>' % self.__class__.__name__] - - def xml_body(self): - xml = [] - for child in self.children: - xml.extend(child.xml()) - return xml - -class mrow(math): - def xml_start(self): - return ['\n<%s>' % self.__class__.__name__] - -class mtable(math): - def xml_start(self): - return ['\n<%s>' % self.__class__.__name__] - -class mtr(mrow): pass -class mtd(mrow): pass - -class mx(math): - """Base class for mo, mi, and mn""" - - nchildren = 0 - def __init__(self, data): - self.data = data - - def xml_body(self): - return [self.data] - -class mo(mx): - translation = {'<': '<', '>': '>'} - def xml_body(self): - return [self.translation.get(self.data, self.data)] - -class mi(mx): pass -class mn(mx): pass - -class msub(math): - nchildren = 2 - -class msup(math): - nchildren = 2 - -class msqrt(math): - nchildren = 1 - -class mroot(math): - nchildren = 2 - -class mfrac(math): - nchildren = 2 - -class msubsup(math): - nchildren = 3 - def __init__(self, children=None, reversed=False): - self.reversed = reversed - math.__init__(self, children) - - def xml(self): - if self.reversed: -## self.children[1:3] = self.children[2:0:-1] - self.children[1:3] = [self.children[2], self.children[1]] - self.reversed = False - return math.xml(self) - -class mfenced(math): - translation = {'\\{': '{', '\\langle': u'\u2329', - '\\}': '}', '\\rangle': u'\u232A', - '.': ''} - def __init__(self, par): - self.openpar = par - math.__init__(self) - - def xml_start(self): - open = self.translation.get(self.openpar, self.openpar) - close = self.translation.get(self.closepar, self.closepar) - return ['<mfenced open="%s" close="%s">' % (open, close)] - -class mspace(math): - nchildren = 0 - -class mstyle(math): - def __init__(self, children=None, nchildren=None, **kwargs): - if nchildren is not None: - self.nchildren = nchildren - math.__init__(self, children) - self.attrs = kwargs - - def xml_start(self): - return ['<mstyle '] + ['%s="%s"' % item - for item in self.attrs.items()] + ['>'] - -class mover(math): - nchildren = 2 - def __init__(self, children=None, reversed=False): - self.reversed = reversed - math.__init__(self, children) - - def xml(self): - if self.reversed: - self.children.reverse() - self.reversed = False - return math.xml(self) - -class munder(math): - nchildren = 2 - -class munderover(math): - nchildren = 3 - def __init__(self, children=None): - math.__init__(self, children) - -class mtext(math): - nchildren = 0 - def __init__(self, text): - self.text = text - - def xml_body(self): - return [self.text] - -def parse_latex_math(string, inline=True): - """parse_latex_math(string [,inline]) -> MathML-tree - - Returns a MathML-tree parsed from string. inline=True is for - inline math and inline=False is for displayed math. - - tree is the whole tree and node is the current element.""" - - # Normalize white-space: - string = ' '.join(string.split()) - - if inline: - node = mrow() - tree = math(node, inline=True) - else: - node = mtd() - tree = math(mtable(mtr(node)), inline=False) - - while len(string) > 0: - n = len(string) - c = string[0] - skip = 1 # number of characters consumed - if n > 1: - c2 = string[1] - else: - c2 = '' - if c == ' ': - pass - elif c == '\\': - if c2 in '{}': - node = node.append(mo(c2)) - skip = 2 - elif c2 == ' ': - node = node.append(mspace()) - skip = 2 - elif c2 == ',': # TODO: small space - node = node.append(mspace()) - skip = 2 - elif c2.isalpha(): - # We have a LaTeX-name: - i = 2 - while i < n and string[i].isalpha(): - i += 1 - name = string[1:i] - node, skip = handle_keyword(name, node, string[i:]) - skip += i - elif c2 == '\\': - # End of a row: - entry = mtd() - row = mtr(entry) - node.close().close().append(row) - node = entry - skip = 2 - else: - raise SyntaxError(u'Syntax error: "%s%s"' % (c, c2)) - elif c.isalpha(): - node = node.append(mi(c)) - elif c.isdigit(): - node = node.append(mn(c)) - elif c in "+-*/=()[]|<>,.!?':;@": - node = node.append(mo(c)) - elif c == '_': - child = node.delete_child() - if isinstance(child, msup): - sub = msubsup(child.children, reversed=True) - elif isinstance(child, mo) and child.data in sumintprod: - sub = munder(child) - else: - sub = msub(child) - node.append(sub) - node = sub - elif c == '^': - child = node.delete_child() - if isinstance(child, msub): - sup = msubsup(child.children) - elif isinstance(child, mo) and child.data in sumintprod: - sup = mover(child) - elif (isinstance(child, munder) and - child.children[0].data in sumintprod): - sup = munderover(child.children) - else: - sup = msup(child) - node.append(sup) - node = sup - elif c == '{': - row = mrow() - node.append(row) - node = row - elif c == '}': - node = node.close() - elif c == '&': - entry = mtd() - node.close().append(entry) - node = entry - else: - raise SyntaxError(u'Illegal character: "%s"' % c) - string = string[skip:] - return tree - - -def handle_keyword(name, node, string): - skip = 0 - if len(string) > 0 and string[0] == ' ': - string = string[1:] - skip = 1 - if name == 'begin': - if not string.startswith('{matrix}'): - raise SyntaxError(u'Environment not supported! ' - u'Supported environment: "matrix".') - skip += 8 - entry = mtd() - table = mtable(mtr(entry)) - node.append(table) - node = entry - elif name == 'end': - if not string.startswith('{matrix}'): - raise SyntaxError(u'Expected "\\end{matrix}"!') - skip += 8 - node = node.close().close().close() - elif name in ('text', 'mathrm'): - if string[0] != '{': - raise SyntaxError(u'Expected "\\text{...}"!') - i = string.find('}') - if i == -1: - raise SyntaxError(u'Expected "\\text{...}"!') - node = node.append(mtext(string[1:i])) - skip += i + 1 - elif name == 'sqrt': - sqrt = msqrt() - node.append(sqrt) - node = sqrt - elif name == 'frac': - frac = mfrac() - node.append(frac) - node = frac - elif name == 'left': - for par in ['(', '[', '|', '\\{', '\\langle', '.']: - if string.startswith(par): - break - else: - raise SyntaxError(u'Missing left-brace!') - fenced = mfenced(par) - node.append(fenced) - row = mrow() - fenced.append(row) - node = row - skip += len(par) - elif name == 'right': - for par in [')', ']', '|', '\\}', '\\rangle', '.']: - if string.startswith(par): - break - else: - raise SyntaxError(u'Missing right-brace!') - node = node.close() - node.closepar = par - node = node.close() - skip += len(par) - elif name == 'not': - for operator in negatables: - if string.startswith(operator): - break - else: - raise SyntaxError(u'Expected something to negate: "\\not ..."!') - node = node.append(mo(negatables[operator])) - skip += len(operator) - elif name == 'mathbf': - style = mstyle(nchildren=1, fontweight='bold') - node.append(style) - node = style - elif name == 'mathbb': - if string[0] != '{' or not string[1].isupper() or string[2] != '}': - raise SyntaxError(u'Expected something like "\\mathbb{A}"!') - node = node.append(mi(mathbb[string[1]])) - skip += 3 - elif name in ('mathscr', 'mathcal'): - if string[0] != '{' or string[2] != '}': - raise SyntaxError(u'Expected something like "\\mathscr{A}"!') - node = node.append(mi(mathscr[string[1]])) - skip += 3 - elif name == 'colon': # "normal" colon, not binary operator - node = node.append(mo(':')) # TODO: add ``lspace="0pt"`` - elif name in Greek: # Greek capitals (upright in "TeX style") - node = node.append(mo(Greek[name])) - # TODO: "ISO style" sets them italic. Could we use a class argument - # to enable styling via CSS? - elif name in letters: - node = node.append(mi(letters[name])) - elif name in special: - node = node.append(mo(special[name])) - elif name in functions: - node = node.append(mo(name)) - elif name in over: - ovr = mover(mo(over[name]), reversed=True) - node.append(ovr) - node = ovr - else: - raise SyntaxError(u'Unknown LaTeX command: ' + name) - - return node, skip - -def tex2mathml(tex_math, inline=True): - """Return string with MathML code corresponding to `tex_math`. - - `inline`=True is for inline math and `inline`=False for displayed math. - """ - - mathml_tree = parse_latex_math(tex_math, inline=inline) - return ''.join(mathml_tree.xml()) diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/math2html.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/math2html.py deleted file mode 100644 index ca7092c..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/math2html.py +++ /dev/null @@ -1,5383 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- - -# math2html: convert LaTeX equations to HTML output. -# -# Copyright (C) 2009-2011 Alex Fernández -# -# Released under the terms of the `2-Clause BSD license'_, in short: -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause - -# Based on eLyXer: convert LyX source files to HTML output. -# http://alexfernandez.github.io/elyxer/ - -# --end-- -# Alex 20101110 -# eLyXer standalone formula conversion to HTML. - -import codecs -import datetime -import gettext -import io -import os.path -import sys -import unicodedata - -if sys.version_info >= (3, 0): - from urllib.parse import quote_plus -else: - from urllib import quote_plus - - -if sys.version_info >= (3, 0): - unicode = str #noqa - basestring = str # noqa - file = io.IOBase # noqa - - -class Trace(object): - "A tracing class" - - debugmode = False - quietmode = False - showlinesmode = False - - prefix = None - - def debug(cls, message): - "Show a debug message" - if not Trace.debugmode or Trace.quietmode: - return - Trace.show(message, sys.stdout) - - def message(cls, message): - "Show a trace message" - if Trace.quietmode: - return - if Trace.prefix and Trace.showlinesmode: - message = Trace.prefix + message - Trace.show(message, sys.stdout) - - def error(cls, message): - "Show an error message" - message = '* ' + message - if Trace.prefix and Trace.showlinesmode: - message = Trace.prefix + message - Trace.show(message, sys.stderr) - - def fatal(cls, message): - "Show an error message and terminate" - Trace.error('FATAL: ' + message) - exit(-1) - - def show(cls, message, channel): - "Show a message out of a channel" - if sys.version_info < (3, 0): - message = message.encode('utf-8') - channel.write(message + '\n') - - debug = classmethod(debug) - message = classmethod(message) - error = classmethod(error) - fatal = classmethod(fatal) - show = classmethod(show) - - -class BibStylesConfig(object): - "Configuration class from elyxer.config file" - - abbrvnat = { - u'@article': u'$authors. $title. <i>$journal</i>,{ {$volume:}$pages,} $month $year.{ doi: $doi.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'cite': u'$surname($year)', - u'default': u'$authors. <i>$title</i>. $publisher, $year.{ URL <a href="$url">$url</a>.}{ $note.}', - } - - alpha = { - u'@article': u'$authors. $title.{ <i>$journal</i>{, {$volume}{($number)}}{: $pages}{, $year}.}{ <a href="$url">$url</a>.}{ <a href="$filename">$filename</a>.}{ $note.}', - u'cite': u'$Sur$YY', - u'default': u'$authors. $title.{ <i>$journal</i>,} $year.{ <a href="$url">$url</a>.}{ <a href="$filename">$filename</a>.}{ $note.}', - } - - authordate2 = { - u'@article': u'$authors. $year. $title. <i>$journal</i>, <b>$volume</b>($number), $pages.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@book': u'$authors. $year. <i>$title</i>. $publisher.{ URL <a href="$url">$url</a>.}{ $note.}', - u'cite': u'$surname, $year', - u'default': u'$authors. $year. <i>$title</i>. $publisher.{ URL <a href="$url">$url</a>.}{ $note.}', - } - - default = { - u'@article': u'$authors: “$title”, <i>$journal</i>,{ pp. $pages,} $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@book': u'{$authors: }<i>$title</i>{ ($editor, ed.)}.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@booklet': u'$authors: <i>$title</i>.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@conference': u'$authors: “$title”, <i>$journal</i>,{ pp. $pages,} $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@inbook': u'$authors: <i>$title</i>.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@incollection': u'$authors: <i>$title</i>{ in <i>$booktitle</i>{ ($editor, ed.)}}.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@inproceedings': u'$authors: “$title”, <i>$booktitle</i>,{ pp. $pages,} $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@manual': u'$authors: <i>$title</i>.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@mastersthesis': u'$authors: <i>$title</i>.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@misc': u'$authors: <i>$title</i>.{{ $publisher,}{ $howpublished,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@phdthesis': u'$authors: <i>$title</i>.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@proceedings': u'$authors: “$title”, <i>$journal</i>,{ pp. $pages,} $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@techreport': u'$authors: <i>$title</i>, $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@unpublished': u'$authors: “$title”, <i>$journal</i>, $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'cite': u'$index', - u'default': u'$authors: <i>$title</i>.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - } - - defaulttags = { - u'YY': u'??', u'authors': u'', u'surname': u'', - } - - ieeetr = { - u'@article': u'$authors, “$title”, <i>$journal</i>, vol. $volume, no. $number, pp. $pages, $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@book': u'$authors, <i>$title</i>. $publisher, $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'cite': u'$index', - u'default': u'$authors, “$title”. $year.{ URL <a href="$url">$url</a>.}{ $note.}', - } - - plain = { - u'@article': u'$authors. $title.{ <i>$journal</i>{, {$volume}{($number)}}{:$pages}{, $year}.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'@book': u'$authors. <i>$title</i>. $publisher,{ $month} $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@incollection': u'$authors. $title.{ In <i>$booktitle</i> {($editor, ed.)}.} $publisher,{ $month} $year.{ URL <a href="$url">$url</a>.}{ $note.}', - u'@inproceedings': u'$authors. $title. { <i>$booktitle</i>{, {$volume}{($number)}}{:$pages}{, $year}.}{ URL <a href="$url">$url</a>.}{ $note.}', - u'cite': u'$index', - u'default': u'{$authors. }$title.{{ $publisher,} $year.}{ URL <a href="$url">$url</a>.}{ $note.}', - } - - vancouver = { - u'@article': u'$authors. $title. <i>$journal</i>, $year{;{<b>$volume</b>}{($number)}{:$pages}}.{ URL: <a href="$url">$url</a>.}{ $note.}', - u'@book': u'$authors. $title. {$publisher, }$year.{ URL: <a href="$url">$url</a>.}{ $note.}', - u'cite': u'$index', - u'default': u'$authors. $title; {$publisher, }$year.{ $howpublished.}{ URL: <a href="$url">$url</a>.}{ $note.}', - } - -class BibTeXConfig(object): - "Configuration class from elyxer.config file" - - replaced = { - u'--': u'—', u'..': u'.', - } - -class ContainerConfig(object): - "Configuration class from elyxer.config file" - - endings = { - u'Align': u'\\end_layout', u'BarredText': u'\\bar', - u'BoldText': u'\\series', u'Cell': u'</cell', - u'ChangeDeleted': u'\\change_unchanged', - u'ChangeInserted': u'\\change_unchanged', u'ColorText': u'\\color', - u'EmphaticText': u'\\emph', u'Hfill': u'\\hfill', u'Inset': u'\\end_inset', - u'Layout': u'\\end_layout', u'LyXFooter': u'\\end_document', - u'LyXHeader': u'\\end_header', u'Row': u'</row', u'ShapedText': u'\\shape', - u'SizeText': u'\\size', u'StrikeOut': u'\\strikeout', - u'TextFamily': u'\\family', u'VersalitasText': u'\\noun', - } - - extracttext = { - u'allowed': [u'StringContainer', u'Constant', u'FormulaConstant',], - u'cloned': [u'',], - u'extracted': [u'PlainLayout', u'TaggedText', u'Align', u'Caption', u'TextFamily', u'EmphaticText', u'VersalitasText', u'BarredText', u'SizeText', u'ColorText', u'LangLine', u'Formula', u'Bracket', u'RawText', u'BibTag', u'FormulaNumber', u'AlphaCommand', u'EmptyCommand', u'OneParamFunction', u'SymbolFunction', u'TextFunction', u'FontFunction', u'CombiningFunction', u'DecoratingFunction', u'FormulaSymbol', u'BracketCommand', u'TeXCode',], - } - - startendings = { - u'\\begin_deeper': u'\\end_deeper', u'\\begin_inset': u'\\end_inset', - u'\\begin_layout': u'\\end_layout', - } - - starts = { - u'': u'StringContainer', u'#LyX': u'BlackBox', u'</lyxtabular': u'BlackBox', - u'<cell': u'Cell', u'<column': u'Column', u'<row': u'Row', - u'\\align': u'Align', u'\\bar': u'BarredText', - u'\\bar default': u'BlackBox', u'\\bar no': u'BlackBox', - u'\\begin_body': u'BlackBox', u'\\begin_deeper': u'DeeperList', - u'\\begin_document': u'BlackBox', u'\\begin_header': u'LyXHeader', - u'\\begin_inset Argument': u'ShortTitle', - u'\\begin_inset Box': u'BoxInset', u'\\begin_inset Branch': u'Branch', - u'\\begin_inset Caption': u'Caption', - u'\\begin_inset CommandInset bibitem': u'BiblioEntry', - u'\\begin_inset CommandInset bibtex': u'BibTeX', - u'\\begin_inset CommandInset citation': u'BiblioCitation', - u'\\begin_inset CommandInset href': u'URL', - u'\\begin_inset CommandInset include': u'IncludeInset', - u'\\begin_inset CommandInset index_print': u'PrintIndex', - u'\\begin_inset CommandInset label': u'Label', - u'\\begin_inset CommandInset line': u'LineInset', - u'\\begin_inset CommandInset nomencl_print': u'PrintNomenclature', - u'\\begin_inset CommandInset nomenclature': u'NomenclatureEntry', - u'\\begin_inset CommandInset ref': u'Reference', - u'\\begin_inset CommandInset toc': u'TableOfContents', - u'\\begin_inset ERT': u'ERT', u'\\begin_inset Flex': u'FlexInset', - u'\\begin_inset Flex Chunkref': u'NewfangledChunkRef', - u'\\begin_inset Flex Marginnote': u'SideNote', - u'\\begin_inset Flex Sidenote': u'SideNote', - u'\\begin_inset Flex URL': u'FlexURL', u'\\begin_inset Float': u'Float', - u'\\begin_inset FloatList': u'ListOf', u'\\begin_inset Foot': u'Footnote', - u'\\begin_inset Formula': u'Formula', - u'\\begin_inset FormulaMacro': u'FormulaMacro', - u'\\begin_inset Graphics': u'Image', - u'\\begin_inset Index': u'IndexReference', - u'\\begin_inset Info': u'InfoInset', - u'\\begin_inset LatexCommand bibitem': u'BiblioEntry', - u'\\begin_inset LatexCommand bibtex': u'BibTeX', - u'\\begin_inset LatexCommand cite': u'BiblioCitation', - u'\\begin_inset LatexCommand citealt': u'BiblioCitation', - u'\\begin_inset LatexCommand citep': u'BiblioCitation', - u'\\begin_inset LatexCommand citet': u'BiblioCitation', - u'\\begin_inset LatexCommand htmlurl': u'URL', - u'\\begin_inset LatexCommand index': u'IndexReference', - u'\\begin_inset LatexCommand label': u'Label', - u'\\begin_inset LatexCommand nomenclature': u'NomenclatureEntry', - u'\\begin_inset LatexCommand prettyref': u'Reference', - u'\\begin_inset LatexCommand printindex': u'PrintIndex', - u'\\begin_inset LatexCommand printnomenclature': u'PrintNomenclature', - u'\\begin_inset LatexCommand ref': u'Reference', - u'\\begin_inset LatexCommand tableofcontents': u'TableOfContents', - u'\\begin_inset LatexCommand url': u'URL', - u'\\begin_inset LatexCommand vref': u'Reference', - u'\\begin_inset Marginal': u'SideNote', - u'\\begin_inset Newline': u'NewlineInset', - u'\\begin_inset Newpage': u'NewPageInset', u'\\begin_inset Note': u'Note', - u'\\begin_inset OptArg': u'ShortTitle', - u'\\begin_inset Phantom': u'PhantomText', - u'\\begin_inset Quotes': u'QuoteContainer', - u'\\begin_inset Tabular': u'Table', u'\\begin_inset Text': u'InsetText', - u'\\begin_inset VSpace': u'VerticalSpace', u'\\begin_inset Wrap': u'Wrap', - u'\\begin_inset listings': u'Listing', - u'\\begin_inset script': u'ScriptInset', u'\\begin_inset space': u'Space', - u'\\begin_layout': u'Layout', u'\\begin_layout Abstract': u'Abstract', - u'\\begin_layout Author': u'Author', - u'\\begin_layout Bibliography': u'Bibliography', - u'\\begin_layout Chunk': u'NewfangledChunk', - u'\\begin_layout Description': u'Description', - u'\\begin_layout Enumerate': u'ListItem', - u'\\begin_layout Itemize': u'ListItem', u'\\begin_layout List': u'List', - u'\\begin_layout LyX-Code': u'LyXCode', - u'\\begin_layout Plain': u'PlainLayout', - u'\\begin_layout Standard': u'StandardLayout', - u'\\begin_layout Title': u'Title', u'\\begin_preamble': u'LyXPreamble', - u'\\change_deleted': u'ChangeDeleted', - u'\\change_inserted': u'ChangeInserted', - u'\\change_unchanged': u'BlackBox', u'\\color': u'ColorText', - u'\\color inherit': u'BlackBox', u'\\color none': u'BlackBox', - u'\\emph default': u'BlackBox', u'\\emph off': u'BlackBox', - u'\\emph on': u'EmphaticText', u'\\emph toggle': u'EmphaticText', - u'\\end_body': u'LyXFooter', u'\\family': u'TextFamily', - u'\\family default': u'BlackBox', u'\\family roman': u'BlackBox', - u'\\hfill': u'Hfill', u'\\labelwidthstring': u'BlackBox', - u'\\lang': u'LangLine', u'\\length': u'InsetLength', - u'\\lyxformat': u'LyXFormat', u'\\lyxline': u'LyXLine', - u'\\newline': u'Newline', u'\\newpage': u'NewPage', - u'\\noindent': u'BlackBox', u'\\noun default': u'BlackBox', - u'\\noun off': u'BlackBox', u'\\noun on': u'VersalitasText', - u'\\paragraph_spacing': u'BlackBox', u'\\series bold': u'BoldText', - u'\\series default': u'BlackBox', u'\\series medium': u'BlackBox', - u'\\shape': u'ShapedText', u'\\shape default': u'BlackBox', - u'\\shape up': u'BlackBox', u'\\size': u'SizeText', - u'\\size normal': u'BlackBox', u'\\start_of_appendix': u'StartAppendix', - u'\\strikeout default': u'BlackBox', u'\\strikeout on': u'StrikeOut', - } - - string = { - u'startcommand': u'\\', - } - - table = { - u'headers': [u'<lyxtabular', u'<features',], - } - -class EscapeConfig(object): - "Configuration class from elyxer.config file" - - chars = { - u'\n': u'', u' -- ': u' — ', u' --- ': u' — ', u'\'': u'’', u'`': u'‘', - } - - commands = { - u'\\InsetSpace \\space{}': u' ', u'\\InsetSpace \\thinspace{}': u' ', - u'\\InsetSpace ~': u' ', u'\\SpecialChar \\-': u'', - u'\\SpecialChar \\@.': u'.', u'\\SpecialChar \\ldots{}': u'…', - u'\\SpecialChar \\menuseparator': u' ▷ ', - u'\\SpecialChar \\nobreakdash-': u'-', u'\\SpecialChar \\slash{}': u'/', - u'\\SpecialChar \\textcompwordmark{}': u'', u'\\backslash': u'\\', - } - - entities = { - u'&': u'&', u'<': u'<', u'>': u'>', - } - - html = { - u'/>': u'>', - } - - iso885915 = { - u' ': u' ', u' ': u' ', u' ': u' ', - } - - nonunicode = { - u' ': u' ', - } - -class FormulaConfig(object): - "Configuration class from elyxer.config file" - - alphacommands = { - u'\\AA': u'Å', u'\\AE': u'Æ', - u'\\AmS': u'<span class="versalitas">AmS</span>', u'\\Angstroem': u'Å', - u'\\DH': u'Ð', u'\\Koppa': u'Ϟ', u'\\L': u'Ł', u'\\Micro': u'µ', u'\\O': u'Ø', - u'\\OE': u'Œ', u'\\Sampi': u'Ϡ', u'\\Stigma': u'Ϛ', u'\\TH': u'Þ', - u'\\aa': u'å', u'\\ae': u'æ', u'\\alpha': u'α', u'\\beta': u'β', - u'\\delta': u'δ', u'\\dh': u'ð', u'\\digamma': u'ϝ', u'\\epsilon': u'ϵ', - u'\\eta': u'η', u'\\eth': u'ð', u'\\gamma': u'γ', u'\\i': u'ı', - u'\\imath': u'ı', u'\\iota': u'ι', u'\\j': u'ȷ', u'\\jmath': u'ȷ', - u'\\kappa': u'κ', u'\\koppa': u'ϟ', u'\\l': u'ł', u'\\lambda': u'λ', - u'\\mu': u'μ', u'\\nu': u'ν', u'\\o': u'ø', u'\\oe': u'œ', u'\\omega': u'ω', - u'\\phi': u'φ', u'\\pi': u'π', u'\\psi': u'ψ', u'\\rho': u'ρ', - u'\\sampi': u'ϡ', u'\\sigma': u'σ', u'\\ss': u'ß', u'\\stigma': u'ϛ', - u'\\tau': u'τ', u'\\tcohm': u'Ω', u'\\textcrh': u'ħ', u'\\th': u'þ', - u'\\theta': u'θ', u'\\upsilon': u'υ', u'\\varDelta': u'∆', - u'\\varGamma': u'Γ', u'\\varLambda': u'Λ', u'\\varOmega': u'Ω', - u'\\varPhi': u'Φ', u'\\varPi': u'Π', u'\\varPsi': u'Ψ', u'\\varSigma': u'Σ', - u'\\varTheta': u'Θ', u'\\varUpsilon': u'Υ', u'\\varXi': u'Ξ', - u'\\varbeta': u'ϐ', u'\\varepsilon': u'ε', u'\\varkappa': u'ϰ', - u'\\varphi': u'φ', u'\\varpi': u'ϖ', u'\\varrho': u'ϱ', u'\\varsigma': u'ς', - u'\\vartheta': u'ϑ', u'\\xi': u'ξ', u'\\zeta': u'ζ', - } - - array = { - u'begin': u'\\begin', u'cellseparator': u'&', u'end': u'\\end', - u'rowseparator': u'\\\\', - } - - bigbrackets = { - u'(': [u'⎛', u'⎜', u'⎝',], u')': [u'⎞', u'⎟', u'⎠',], u'[': [u'⎡', u'⎢', u'⎣',], - u']': [u'⎤', u'⎥', u'⎦',], u'{': [u'⎧', u'⎪', u'⎨', u'⎩',], u'|': [u'|',], - u'}': [u'⎫', u'⎪', u'⎬', u'⎭',], u'∥': [u'∥',], - } - - bigsymbols = { - u'∑': [u'⎲', u'⎳',], u'∫': [u'⌠', u'⌡',], - } - - bracketcommands = { - u'\\left': u'span class="symbol"', - u'\\left.': u'<span class="leftdot"></span>', - u'\\middle': u'span class="symbol"', u'\\right': u'span class="symbol"', - u'\\right.': u'<span class="rightdot"></span>', - } - - combiningfunctions = { - u'\\"': u'̈', u'\\\'': u'́', u'\\^': u'̂', u'\\`': u'̀', u'\\acute': u'́', - u'\\bar': u'̄', u'\\breve': u'̆', u'\\c': u'̧', u'\\check': u'̌', - u'\\dddot': u'⃛', u'\\ddot': u'̈', u'\\dot': u'̇', u'\\grave': u'̀', - u'\\hat': u'̂', u'\\mathring': u'̊', u'\\overleftarrow': u'⃖', - u'\\overrightarrow': u'⃗', u'\\r': u'̊', u'\\s': u'̩', - u'\\textcircled': u'⃝', u'\\textsubring': u'̥', u'\\tilde': u'̃', - u'\\v': u'̌', u'\\vec': u'⃗', u'\\~': u'̃', - } - - commands = { - u'\\ ': u' ', u'\\!': u'', u'\\#': u'#', u'\\$': u'$', u'\\%': u'%', - u'\\&': u'&', u'\\,': u' ', u'\\:': u' ', u'\\;': u' ', u'\\AC': u'∿', - u'\\APLcomment': u'⍝', u'\\APLdownarrowbox': u'⍗', u'\\APLinput': u'⍞', - u'\\APLinv': u'⌹', u'\\APLleftarrowbox': u'⍇', u'\\APLlog': u'⍟', - u'\\APLrightarrowbox': u'⍈', u'\\APLuparrowbox': u'⍐', u'\\Box': u'□', - u'\\Bumpeq': u'≎', u'\\CIRCLE': u'●', u'\\Cap': u'⋒', - u'\\CapitalDifferentialD': u'ⅅ', u'\\CheckedBox': u'☑', u'\\Circle': u'○', - u'\\Coloneqq': u'⩴', u'\\ComplexI': u'ⅈ', u'\\ComplexJ': u'ⅉ', - u'\\Corresponds': u'≙', u'\\Cup': u'⋓', u'\\Delta': u'Δ', u'\\Diamond': u'◇', - u'\\Diamondblack': u'◆', u'\\Diamonddot': u'⟐', u'\\DifferentialD': u'ⅆ', - u'\\Downarrow': u'⇓', u'\\EUR': u'€', u'\\Euler': u'ℇ', - u'\\ExponetialE': u'ⅇ', u'\\Finv': u'Ⅎ', u'\\Game': u'⅁', u'\\Gamma': u'Γ', - u'\\Im': u'ℑ', u'\\Join': u'⨝', u'\\LEFTCIRCLE': u'◖', u'\\LEFTcircle': u'◐', - u'\\LHD': u'◀', u'\\Lambda': u'Λ', u'\\Lbag': u'⟅', u'\\Leftarrow': u'⇐', - u'\\Lleftarrow': u'⇚', u'\\Longleftarrow': u'⟸', - u'\\Longleftrightarrow': u'⟺', u'\\Longrightarrow': u'⟹', u'\\Lparen': u'⦅', - u'\\Lsh': u'↰', u'\\Mapsfrom': u'⇐|', u'\\Mapsto': u'|⇒', u'\\Omega': u'Ω', - u'\\P': u'¶', u'\\Phi': u'Φ', u'\\Pi': u'Π', u'\\Pr': u'Pr', u'\\Psi': u'Ψ', - u'\\Qoppa': u'Ϙ', u'\\RHD': u'▶', u'\\RIGHTCIRCLE': u'◗', - u'\\RIGHTcircle': u'◑', u'\\Rbag': u'⟆', u'\\Re': u'ℜ', u'\\Rparen': u'⦆', - u'\\Rrightarrow': u'⇛', u'\\Rsh': u'↱', u'\\S': u'§', u'\\Sigma': u'Σ', - u'\\Square': u'☐', u'\\Subset': u'⋐', u'\\Sun': u'☉', u'\\Supset': u'⋑', - u'\\Theta': u'Θ', u'\\Uparrow': u'⇑', u'\\Updownarrow': u'⇕', - u'\\Upsilon': u'Υ', u'\\Vdash': u'⊩', u'\\Vert': u'∥', u'\\Vvdash': u'⊪', - u'\\XBox': u'☒', u'\\Xi': u'Ξ', u'\\Yup': u'⅄', u'\\\\': u'<br/>', - u'\\_': u'_', u'\\aleph': u'ℵ', u'\\amalg': u'∐', u'\\anchor': u'⚓', - u'\\angle': u'∠', u'\\aquarius': u'♒', u'\\arccos': u'arccos', - u'\\arcsin': u'arcsin', u'\\arctan': u'arctan', u'\\arg': u'arg', - u'\\aries': u'♈', u'\\arrowbullet': u'➢', u'\\ast': u'∗', u'\\asymp': u'≍', - u'\\backepsilon': u'∍', u'\\backprime': u'‵', u'\\backsimeq': u'⋍', - u'\\backslash': u'\\', u'\\ballotx': u'✗', u'\\barwedge': u'⊼', - u'\\because': u'∵', u'\\beth': u'ℶ', u'\\between': u'≬', u'\\bigcap': u'∩', - u'\\bigcirc': u'○', u'\\bigcup': u'∪', u'\\bigodot': u'⊙', - u'\\bigoplus': u'⊕', u'\\bigotimes': u'⊗', u'\\bigsqcup': u'⊔', - u'\\bigstar': u'★', u'\\bigtriangledown': u'▽', u'\\bigtriangleup': u'△', - u'\\biguplus': u'⊎', u'\\bigvee': u'∨', u'\\bigwedge': u'∧', - u'\\biohazard': u'☣', u'\\blacklozenge': u'⧫', u'\\blacksmiley': u'☻', - u'\\blacksquare': u'■', u'\\blacktriangle': u'▲', - u'\\blacktriangledown': u'▼', u'\\blacktriangleleft': u'◂', - u'\\blacktriangleright': u'▶', u'\\blacktriangleup': u'▴', u'\\bot': u'⊥', - u'\\bowtie': u'⋈', u'\\box': u'▫', u'\\boxast': u'⧆', u'\\boxbar': u'◫', - u'\\boxbox': u'⧈', u'\\boxbslash': u'⧅', u'\\boxcircle': u'⧇', - u'\\boxdot': u'⊡', u'\\boxminus': u'⊟', u'\\boxplus': u'⊞', - u'\\boxslash': u'⧄', u'\\boxtimes': u'⊠', u'\\bullet': u'•', - u'\\bumpeq': u'≏', u'\\cancer': u'♋', u'\\cap': u'∩', u'\\capricornus': u'♑', - u'\\cat': u'⁀', u'\\cdot': u'⋅', u'\\cdots': u'⋯', u'\\cent': u'¢', - u'\\centerdot': u'∙', u'\\checkmark': u'✓', u'\\chi': u'χ', u'\\circ': u'∘', - u'\\circeq': u'≗', u'\\circlearrowleft': u'↺', u'\\circlearrowright': u'↻', - u'\\circledR': u'®', u'\\circledast': u'⊛', u'\\circledbslash': u'⦸', - u'\\circledcirc': u'⊚', u'\\circleddash': u'⊝', u'\\circledgtr': u'⧁', - u'\\circledless': u'⧀', u'\\clubsuit': u'♣', u'\\colon': u': ', u'\\coloneqq': u'≔', - u'\\complement': u'∁', u'\\cong': u'≅', u'\\coprod': u'∐', - u'\\copyright': u'©', u'\\cos': u'cos', u'\\cosh': u'cosh', u'\\cot': u'cot', - u'\\coth': u'coth', u'\\csc': u'csc', u'\\cup': u'∪', u'\\curlyvee': u'⋎', - u'\\curlywedge': u'⋏', u'\\curvearrowleft': u'↶', - u'\\curvearrowright': u'↷', u'\\dag': u'†', u'\\dagger': u'†', - u'\\daleth': u'ℸ', u'\\dashleftarrow': u'⇠', u'\\dashv': u'⊣', - u'\\ddag': u'‡', u'\\ddagger': u'‡', u'\\ddots': u'⋱', u'\\deg': u'deg', - u'\\det': u'det', u'\\diagdown': u'╲', u'\\diagup': u'╱', - u'\\diameter': u'⌀', u'\\diamond': u'◇', u'\\diamondsuit': u'♦', - u'\\dim': u'dim', u'\\div': u'÷', u'\\divideontimes': u'⋇', - u'\\dotdiv': u'∸', u'\\doteq': u'≐', u'\\doteqdot': u'≑', u'\\dotplus': u'∔', - u'\\dots': u'…', u'\\doublebarwedge': u'⌆', u'\\downarrow': u'↓', - u'\\downdownarrows': u'⇊', u'\\downharpoonleft': u'⇃', - u'\\downharpoonright': u'⇂', u'\\dsub': u'⩤', u'\\earth': u'♁', - u'\\eighthnote': u'♪', u'\\ell': u'ℓ', u'\\emptyset': u'∅', - u'\\eqcirc': u'≖', u'\\eqcolon': u'≕', u'\\eqsim': u'≂', u'\\euro': u'€', - u'\\exists': u'∃', u'\\exp': u'exp', u'\\fallingdotseq': u'≒', - u'\\fcmp': u'⨾', u'\\female': u'♀', u'\\flat': u'♭', u'\\forall': u'∀', - u'\\fourth': u'⁗', u'\\frown': u'⌢', u'\\frownie': u'☹', u'\\gcd': u'gcd', - u'\\gemini': u'♊', u'\\geq)': u'≥', u'\\geqq': u'≧', u'\\geqslant': u'≥', - u'\\gets': u'←', u'\\gg': u'≫', u'\\ggg': u'⋙', u'\\gimel': u'ℷ', - u'\\gneqq': u'≩', u'\\gnsim': u'⋧', u'\\gtrdot': u'⋗', u'\\gtreqless': u'⋚', - u'\\gtreqqless': u'⪌', u'\\gtrless': u'≷', u'\\gtrsim': u'≳', - u'\\guillemotleft': u'«', u'\\guillemotright': u'»', u'\\hbar': u'ℏ', - u'\\heartsuit': u'♥', u'\\hfill': u'<span class="hfill"> </span>', - u'\\hom': u'hom', u'\\hookleftarrow': u'↩', u'\\hookrightarrow': u'↪', - u'\\hslash': u'ℏ', u'\\idotsint': u'<span class="bigsymbol">∫⋯∫</span>', - u'\\iiint': u'<span class="bigsymbol">∭</span>', - u'\\iint': u'<span class="bigsymbol">∬</span>', u'\\imath': u'ı', - u'\\inf': u'inf', u'\\infty': u'∞', u'\\intercal': u'⊺', - u'\\interleave': u'⫴', u'\\invamp': u'⅋', u'\\invneg': u'⌐', - u'\\jmath': u'ȷ', u'\\jupiter': u'♃', u'\\ker': u'ker', u'\\land': u'∧', - u'\\landupint': u'<span class="bigsymbol">∱</span>', u'\\lang': u'⟪', - u'\\langle': u'⟨', u'\\lblot': u'⦉', u'\\lbrace': u'{', u'\\lbrace)': u'{', - u'\\lbrack': u'[', u'\\lceil': u'⌈', u'\\ldots': u'…', u'\\leadsto': u'⇝', - u'\\leftarrow)': u'←', u'\\leftarrowtail': u'↢', u'\\leftarrowtobar': u'⇤', - u'\\leftharpoondown': u'↽', u'\\leftharpoonup': u'↼', - u'\\leftleftarrows': u'⇇', u'\\leftleftharpoons': u'⥢', u'\\leftmoon': u'☾', - u'\\leftrightarrow': u'↔', u'\\leftrightarrows': u'⇆', - u'\\leftrightharpoons': u'⇋', u'\\leftthreetimes': u'⋋', u'\\leo': u'♌', - u'\\leq)': u'≤', u'\\leqq': u'≦', u'\\leqslant': u'≤', u'\\lessdot': u'⋖', - u'\\lesseqgtr': u'⋛', u'\\lesseqqgtr': u'⪋', u'\\lessgtr': u'≶', - u'\\lesssim': u'≲', u'\\lfloor': u'⌊', u'\\lg': u'lg', u'\\lgroup': u'⟮', - u'\\lhd': u'⊲', u'\\libra': u'♎', u'\\lightning': u'↯', u'\\limg': u'⦇', - u'\\liminf': u'liminf', u'\\limsup': u'limsup', u'\\ll': u'≪', - u'\\llbracket': u'⟦', u'\\llcorner': u'⌞', u'\\lll': u'⋘', u'\\ln': u'ln', - u'\\lneqq': u'≨', u'\\lnot': u'¬', u'\\lnsim': u'⋦', u'\\log': u'log', - u'\\longleftarrow': u'⟵', u'\\longleftrightarrow': u'⟷', - u'\\longmapsto': u'⟼', u'\\longrightarrow': u'⟶', u'\\looparrowleft': u'↫', - u'\\looparrowright': u'↬', u'\\lor': u'∨', u'\\lozenge': u'◊', - u'\\lrcorner': u'⌟', u'\\ltimes': u'⋉', u'\\lyxlock': u'', u'\\male': u'♂', - u'\\maltese': u'✠', u'\\mapsfrom': u'↤', u'\\mapsto': u'↦', - u'\\mathcircumflex': u'^', u'\\max': u'max', u'\\measuredangle': u'∡', - u'\\medbullet': u'⚫', u'\\medcirc': u'⚪', u'\\mercury': u'☿', u'\\mho': u'℧', - u'\\mid': u'∣', u'\\min': u'min', u'\\models': u'⊨', u'\\mp': u'∓', - u'\\multimap': u'⊸', u'\\nLeftarrow': u'⇍', u'\\nLeftrightarrow': u'⇎', - u'\\nRightarrow': u'⇏', u'\\nVDash': u'⊯', u'\\nabla': u'∇', - u'\\napprox': u'≉', u'\\natural': u'♮', u'\\ncong': u'≇', u'\\nearrow': u'↗', - u'\\neg': u'¬', u'\\neg)': u'¬', u'\\neptune': u'♆', u'\\nequiv': u'≢', - u'\\newline': u'<br/>', u'\\nexists': u'∄', u'\\ngeqslant': u'≱', - u'\\ngtr': u'≯', u'\\ngtrless': u'≹', u'\\ni': u'∋', u'\\ni)': u'∋', - u'\\nleftarrow': u'↚', u'\\nleftrightarrow': u'↮', u'\\nleqslant': u'≰', - u'\\nless': u'≮', u'\\nlessgtr': u'≸', u'\\nmid': u'∤', u'\\nolimits': u'', - u'\\nonumber': u'', u'\\not': u'¬', u'\\not<': u'≮', u'\\not=': u'≠', - u'\\not>': u'≯', u'\\notbackslash': u'⍀', u'\\notin': u'∉', u'\\notni': u'∌', - u'\\notslash': u'⌿', u'\\nparallel': u'∦', u'\\nprec': u'⊀', - u'\\nrightarrow': u'↛', u'\\nsim': u'≁', u'\\nsimeq': u'≄', - u'\\nsqsubset': u'⊏̸', u'\\nsubseteq': u'⊈', u'\\nsucc': u'⊁', - u'\\nsucccurlyeq': u'⋡', u'\\nsupset': u'⊅', u'\\nsupseteq': u'⊉', - u'\\ntriangleleft': u'⋪', u'\\ntrianglelefteq': u'⋬', - u'\\ntriangleright': u'⋫', u'\\ntrianglerighteq': u'⋭', u'\\nvDash': u'⊭', - u'\\nvdash': u'⊬', u'\\nwarrow': u'↖', u'\\odot': u'⊙', - u'\\officialeuro': u'€', u'\\oiiint': u'<span class="bigsymbol">∰</span>', - u'\\oiint': u'<span class="bigsymbol">∯</span>', - u'\\oint': u'<span class="bigsymbol">∮</span>', - u'\\ointclockwise': u'<span class="bigsymbol">∲</span>', - u'\\ointctrclockwise': u'<span class="bigsymbol">∳</span>', - u'\\ominus': u'⊖', u'\\oplus': u'⊕', u'\\oslash': u'⊘', u'\\otimes': u'⊗', - u'\\owns': u'∋', u'\\parallel': u'∥', u'\\partial': u'∂', u'\\pencil': u'✎', - u'\\perp': u'⊥', u'\\pisces': u'♓', u'\\pitchfork': u'⋔', u'\\pluto': u'♇', - u'\\pm': u'±', u'\\pointer': u'➪', u'\\pointright': u'☞', u'\\pounds': u'£', - u'\\prec': u'≺', u'\\preccurlyeq': u'≼', u'\\preceq': u'≼', - u'\\precsim': u'≾', u'\\prime': u'′', u'\\prompto': u'∝', u'\\qoppa': u'ϙ', - u'\\qquad': u' ', u'\\quad': u' ', u'\\quarternote': u'♩', - u'\\radiation': u'☢', u'\\rang': u'⟫', u'\\rangle': u'⟩', u'\\rblot': u'⦊', - u'\\rbrace': u'}', u'\\rbrace)': u'}', u'\\rbrack': u']', u'\\rceil': u'⌉', - u'\\recycle': u'♻', u'\\rfloor': u'⌋', u'\\rgroup': u'⟯', u'\\rhd': u'⊳', - u'\\rightangle': u'∟', u'\\rightarrow)': u'→', u'\\rightarrowtail': u'↣', - u'\\rightarrowtobar': u'⇥', u'\\rightharpoondown': u'⇁', - u'\\rightharpoonup': u'⇀', u'\\rightharpooondown': u'⇁', - u'\\rightharpooonup': u'⇀', u'\\rightleftarrows': u'⇄', - u'\\rightleftharpoons': u'⇌', u'\\rightmoon': u'☽', - u'\\rightrightarrows': u'⇉', u'\\rightrightharpoons': u'⥤', - u'\\rightthreetimes': u'⋌', u'\\rimg': u'⦈', u'\\risingdotseq': u'≓', - u'\\rrbracket': u'⟧', u'\\rsub': u'⩥', u'\\rtimes': u'⋊', - u'\\sagittarius': u'♐', u'\\saturn': u'♄', u'\\scorpio': u'♏', - u'\\searrow': u'↘', u'\\sec': u'sec', u'\\second': u'″', u'\\setminus': u'∖', - u'\\sharp': u'♯', u'\\simeq': u'≃', u'\\sin': u'sin', u'\\sinh': u'sinh', - u'\\sixteenthnote': u'♬', u'\\skull': u'☠', u'\\slash': u'∕', - u'\\smallsetminus': u'∖', u'\\smalltriangledown': u'▿', - u'\\smalltriangleleft': u'◃', u'\\smalltriangleright': u'▹', - u'\\smalltriangleup': u'▵', u'\\smile': u'⌣', u'\\smiley': u'☺', - u'\\spadesuit': u'♠', u'\\spddot': u'¨', u'\\sphat': u'', - u'\\sphericalangle': u'∢', u'\\spot': u'⦁', u'\\sptilde': u'~', - u'\\sqcap': u'⊓', u'\\sqcup': u'⊔', u'\\sqsubset': u'⊏', - u'\\sqsubseteq': u'⊑', u'\\sqsupset': u'⊐', u'\\sqsupseteq': u'⊒', - u'\\square': u'□', u'\\sslash': u'⫽', u'\\star': u'⋆', u'\\steaming': u'☕', - u'\\subseteqq': u'⫅', u'\\subsetneqq': u'⫋', u'\\succ': u'≻', - u'\\succcurlyeq': u'≽', u'\\succeq': u'≽', u'\\succnsim': u'⋩', - u'\\succsim': u'≿', u'\\sun': u'☼', u'\\sup': u'sup', u'\\supseteqq': u'⫆', - u'\\supsetneqq': u'⫌', u'\\surd': u'√', u'\\swarrow': u'↙', - u'\\swords': u'⚔', u'\\talloblong': u'⫾', u'\\tan': u'tan', - u'\\tanh': u'tanh', u'\\taurus': u'♉', u'\\textasciicircum': u'^', - u'\\textasciitilde': u'~', u'\\textbackslash': u'\\', - u'\\textcopyright': u'©\'', u'\\textdegree': u'°', u'\\textellipsis': u'…', - u'\\textemdash': u'—', u'\\textendash': u'—', u'\\texteuro': u'€', - u'\\textgreater': u'>', u'\\textless': u'<', u'\\textordfeminine': u'ª', - u'\\textordmasculine': u'º', u'\\textquotedblleft': u'“', - u'\\textquotedblright': u'”', u'\\textquoteright': u'’', - u'\\textregistered': u'®', u'\\textrightarrow': u'→', - u'\\textsection': u'§', u'\\texttrademark': u'™', - u'\\texttwosuperior': u'²', u'\\textvisiblespace': u' ', - u'\\therefore': u'∴', u'\\third': u'‴', u'\\top': u'⊤', u'\\triangle': u'△', - u'\\triangleleft': u'⊲', u'\\trianglelefteq': u'⊴', u'\\triangleq': u'≜', - u'\\triangleright': u'▷', u'\\trianglerighteq': u'⊵', - u'\\twoheadleftarrow': u'↞', u'\\twoheadrightarrow': u'↠', - u'\\twonotes': u'♫', u'\\udot': u'⊍', u'\\ulcorner': u'⌜', u'\\unlhd': u'⊴', - u'\\unrhd': u'⊵', u'\\unrhl': u'⊵', u'\\uparrow': u'↑', - u'\\updownarrow': u'↕', u'\\upharpoonleft': u'↿', u'\\upharpoonright': u'↾', - u'\\uplus': u'⊎', u'\\upuparrows': u'⇈', u'\\uranus': u'♅', - u'\\urcorner': u'⌝', u'\\vDash': u'⊨', u'\\varclubsuit': u'♧', - u'\\vardiamondsuit': u'♦', u'\\varheartsuit': u'♥', u'\\varnothing': u'∅', - u'\\varspadesuit': u'♤', u'\\vdash': u'⊢', u'\\vdots': u'⋮', u'\\vee': u'∨', - u'\\vee)': u'∨', u'\\veebar': u'⊻', u'\\vert': u'∣', u'\\virgo': u'♍', - u'\\warning': u'⚠', u'\\wasylozenge': u'⌑', u'\\wedge': u'∧', - u'\\wedge)': u'∧', u'\\wp': u'℘', u'\\wr': u'≀', u'\\yen': u'¥', - u'\\yinyang': u'☯', u'\\{': u'{', u'\\|': u'∥', u'\\}': u'}', - } - - decoratedcommand = { - } - - decoratingfunctions = { - u'\\overleftarrow': u'⟵', u'\\overrightarrow': u'⟶', u'\\widehat': u'^', - } - - endings = { - u'bracket': u'}', u'complex': u'\\]', u'endafter': u'}', - u'endbefore': u'\\end{', u'squarebracket': u']', - } - - environments = { - u'align': [u'r', u'l',], u'eqnarray': [u'r', u'c', u'l',], - u'gathered': [u'l', u'l',], - } - - fontfunctions = { - u'\\boldsymbol': u'b', u'\\mathbb': u'span class="blackboard"', - u'\\mathbb{A}': u'𝔸', u'\\mathbb{B}': u'𝔹', u'\\mathbb{C}': u'ℂ', - u'\\mathbb{D}': u'𝔻', u'\\mathbb{E}': u'𝔼', u'\\mathbb{F}': u'𝔽', - u'\\mathbb{G}': u'𝔾', u'\\mathbb{H}': u'ℍ', u'\\mathbb{J}': u'𝕁', - u'\\mathbb{K}': u'𝕂', u'\\mathbb{L}': u'𝕃', u'\\mathbb{N}': u'ℕ', - u'\\mathbb{O}': u'𝕆', u'\\mathbb{P}': u'ℙ', u'\\mathbb{Q}': u'ℚ', - u'\\mathbb{R}': u'ℝ', u'\\mathbb{S}': u'𝕊', u'\\mathbb{T}': u'𝕋', - u'\\mathbb{W}': u'𝕎', u'\\mathbb{Z}': u'ℤ', u'\\mathbf': u'b', - u'\\mathcal': u'span class="scriptfont"', u'\\mathcal{B}': u'ℬ', - u'\\mathcal{E}': u'ℰ', u'\\mathcal{F}': u'ℱ', u'\\mathcal{H}': u'ℋ', - u'\\mathcal{I}': u'ℐ', u'\\mathcal{L}': u'ℒ', u'\\mathcal{M}': u'ℳ', - u'\\mathcal{R}': u'ℛ', u'\\mathfrak': u'span class="fraktur"', - u'\\mathfrak{C}': u'ℭ', u'\\mathfrak{F}': u'𝔉', u'\\mathfrak{H}': u'ℌ', - u'\\mathfrak{I}': u'ℑ', u'\\mathfrak{R}': u'ℜ', u'\\mathfrak{Z}': u'ℨ', - u'\\mathit': u'i', u'\\mathring{A}': u'Å', u'\\mathring{U}': u'Ů', - u'\\mathring{a}': u'å', u'\\mathring{u}': u'ů', u'\\mathring{w}': u'ẘ', - u'\\mathring{y}': u'ẙ', u'\\mathrm': u'span class="mathrm"', - u'\\mathscr': u'span class="scriptfont"', u'\\mathscr{B}': u'ℬ', - u'\\mathscr{E}': u'ℰ', u'\\mathscr{F}': u'ℱ', u'\\mathscr{H}': u'ℋ', - u'\\mathscr{I}': u'ℐ', u'\\mathscr{L}': u'ℒ', u'\\mathscr{M}': u'ℳ', - u'\\mathscr{R}': u'ℛ', u'\\mathsf': u'span class="mathsf"', - u'\\mathtt': u'tt', - } - - hybridfunctions = { - u'\\addcontentsline': [u'{$p!}{$q!}{$r!}', u'f0{}', u'ignored',], - u'\\addtocontents': [u'{$p!}{$q!}', u'f0{}', u'ignored',], - u'\\backmatter': [u'', u'f0{}', u'ignored',], - u'\\binom': [u'{$1}{$2}', u'f2{(}f0{f1{$1}f1{$2}}f2{)}', u'span class="binom"', u'span class="binomstack"', u'span class="bigsymbol"',], - u'\\boxed': [u'{$1}', u'f0{$1}', u'span class="boxed"',], - u'\\cfrac': [u'[$p!]{$1}{$2}', u'f0{f3{(}f1{$1}f3{)/(}f2{$2}f3{)}}', u'span class="fullfraction"', u'span class="numerator align-$p"', u'span class="denominator"', u'span class="ignored"',], - u'\\color': [u'{$p!}{$1}', u'f0{$1}', u'span style="color: $p;"',], - u'\\colorbox': [u'{$p!}{$1}', u'f0{$1}', u'span class="colorbox" style="background: $p;"',], - u'\\dbinom': [u'{$1}{$2}', u'(f0{f1{f2{$1}}f1{f2{ }}f1{f2{$2}}})', u'span class="binomial"', u'span class="binomrow"', u'span class="binomcell"',], - u'\\dfrac': [u'{$1}{$2}', u'f0{f3{(}f1{$1}f3{)/(}f2{$2}f3{)}}', u'span class="fullfraction"', u'span class="numerator"', u'span class="denominator"', u'span class="ignored"',], - u'\\displaystyle': [u'{$1}', u'f0{$1}', u'span class="displaystyle"',], - u'\\fancyfoot': [u'[$p!]{$q!}', u'f0{}', u'ignored',], - u'\\fancyhead': [u'[$p!]{$q!}', u'f0{}', u'ignored',], - u'\\fbox': [u'{$1}', u'f0{$1}', u'span class="fbox"',], - u'\\fboxrule': [u'{$p!}', u'f0{}', u'ignored',], - u'\\fboxsep': [u'{$p!}', u'f0{}', u'ignored',], - u'\\fcolorbox': [u'{$p!}{$q!}{$1}', u'f0{$1}', u'span class="boxed" style="border-color: $p; background: $q;"',], - u'\\frac': [u'{$1}{$2}', u'f0{f3{(}f1{$1}f3{)/(}f2{$2}f3{)}}', u'span class="fraction"', u'span class="numerator"', u'span class="denominator"', u'span class="ignored"',], - u'\\framebox': [u'[$p!][$q!]{$1}', u'f0{$1}', u'span class="framebox align-$q" style="width: $p;"',], - u'\\frontmatter': [u'', u'f0{}', u'ignored',], - u'\\href': [u'[$o]{$u!}{$t!}', u'f0{$t}', u'a href="$u"',], - u'\\hspace': [u'{$p!}', u'f0{ }', u'span class="hspace" style="width: $p;"',], - u'\\leftroot': [u'{$p!}', u'f0{ }', u'span class="leftroot" style="width: $p;px"',], - u'\\mainmatter': [u'', u'f0{}', u'ignored',], - u'\\markboth': [u'{$p!}{$q!}', u'f0{}', u'ignored',], - u'\\markright': [u'{$p!}', u'f0{}', u'ignored',], - u'\\nicefrac': [u'{$1}{$2}', u'f0{f1{$1}⁄f2{$2}}', u'span class="fraction"', u'sup class="numerator"', u'sub class="denominator"', u'span class="ignored"',], - u'\\parbox': [u'[$p!]{$w!}{$1}', u'f0{1}', u'div class="Boxed" style="width: $w;"',], - u'\\raisebox': [u'{$p!}{$1}', u'f0{$1.font}', u'span class="raisebox" style="vertical-align: $p;"',], - u'\\renewenvironment': [u'{$1!}{$2!}{$3!}', u'',], - u'\\rule': [u'[$v!]{$w!}{$h!}', u'f0/', u'hr class="line" style="width: $w; height: $h;"',], - u'\\scriptscriptstyle': [u'{$1}', u'f0{$1}', u'span class="scriptscriptstyle"',], - u'\\scriptstyle': [u'{$1}', u'f0{$1}', u'span class="scriptstyle"',], - u'\\sqrt': [u'[$0]{$1}', u'f0{f1{$0}f2{√}f4{(}f3{$1}f4{)}}', u'span class="sqrt"', u'sup class="root"', u'span class="radical"', u'span class="root"', u'span class="ignored"',], - u'\\stackrel': [u'{$1}{$2}', u'f0{f1{$1}f2{$2}}', u'span class="stackrel"', u'span class="upstackrel"', u'span class="downstackrel"',], - u'\\tbinom': [u'{$1}{$2}', u'(f0{f1{f2{$1}}f1{f2{ }}f1{f2{$2}}})', u'span class="binomial"', u'span class="binomrow"', u'span class="binomcell"',], - u'\\textcolor': [u'{$p!}{$1}', u'f0{$1}', u'span style="color: $p;"',], - u'\\textstyle': [u'{$1}', u'f0{$1}', u'span class="textstyle"',], - u'\\thispagestyle': [u'{$p!}', u'f0{}', u'ignored',], - u'\\unit': [u'[$0]{$1}', u'$0f0{$1.font}', u'span class="unit"',], - u'\\unitfrac': [u'[$0]{$1}{$2}', u'$0f0{f1{$1.font}⁄f2{$2.font}}', u'span class="fraction"', u'sup class="unit"', u'sub class="unit"',], - u'\\uproot': [u'{$p!}', u'f0{ }', u'span class="uproot" style="width: $p;px"',], - u'\\url': [u'{$u!}', u'f0{$u}', u'a href="$u"',], - u'\\vspace': [u'{$p!}', u'f0{ }', u'span class="vspace" style="height: $p;"',], - } - - hybridsizes = { - u'\\binom': u'$1+$2', u'\\cfrac': u'$1+$2', u'\\dbinom': u'$1+$2+1', - u'\\dfrac': u'$1+$2', u'\\frac': u'$1+$2', u'\\tbinom': u'$1+$2+1', - } - - labelfunctions = { - u'\\label': u'a name="#"', - } - - limitcommands = { - u'\\biginterleave': u'⫼', u'\\bigsqcap': u'⨅', u'\\fint': u'⨏', - u'\\iiiint': u'⨌', u'\\int': u'∫', u'\\intop': u'∫', u'\\lim': u'lim', - u'\\prod': u'∏', u'\\smallint': u'∫', u'\\sqint': u'⨖', u'\\sum': u'∑', - u'\\varointclockwise': u'∲', u'\\varprod': u'⨉', u'\\zcmp': u'⨟', - u'\\zhide': u'⧹', u'\\zpipe': u'⨠', u'\\zproject': u'⨡', - } - - misccommands = { - u'\\limits': u'LimitPreviousCommand', u'\\newcommand': u'MacroDefinition', - u'\\renewcommand': u'MacroDefinition', - u'\\setcounter': u'SetCounterFunction', u'\\tag': u'FormulaTag', - u'\\tag*': u'FormulaTag', u'\\today': u'TodayCommand', - } - - modified = { - u'\n': u'', u' ': u'', u'$': u'', u'&': u' ', u'\'': u'’', u'+': u' + ', - u',': u', ', u'-': u' − ', u'/': u' ⁄ ', u':': u' : ', u'<': u' < ', - u'=': u' = ', u'>': u' > ', u'@': u'', u'~': u'', - } - - onefunctions = { - u'\\Big': u'span class="bigsymbol"', u'\\Bigg': u'span class="hugesymbol"', - u'\\bar': u'span class="bar"', u'\\begin{array}': u'span class="arraydef"', - u'\\big': u'span class="symbol"', u'\\bigg': u'span class="largesymbol"', - u'\\bigl': u'span class="bigsymbol"', u'\\bigr': u'span class="bigsymbol"', - u'\\centering': u'span class="align-center"', - u'\\ensuremath': u'span class="ensuremath"', - u'\\hphantom': u'span class="phantom"', - u'\\noindent': u'span class="noindent"', - u'\\overbrace': u'span class="overbrace"', - u'\\overline': u'span class="overline"', - u'\\phantom': u'span class="phantom"', - u'\\underbrace': u'span class="underbrace"', u'\\underline': u'u', - u'\\vphantom': u'span class="phantom"', - } - - spacedcommands = { - u'\\Bot': u'⫫', u'\\Doteq': u'≑', u'\\DownArrowBar': u'⤓', - u'\\DownLeftTeeVector': u'⥞', u'\\DownLeftVectorBar': u'⥖', - u'\\DownRightTeeVector': u'⥟', u'\\DownRightVectorBar': u'⥗', - u'\\Equal': u'⩵', u'\\LeftArrowBar': u'⇤', u'\\LeftDownTeeVector': u'⥡', - u'\\LeftDownVectorBar': u'⥙', u'\\LeftTeeVector': u'⥚', - u'\\LeftTriangleBar': u'⧏', u'\\LeftUpTeeVector': u'⥠', - u'\\LeftUpVectorBar': u'⥘', u'\\LeftVectorBar': u'⥒', - u'\\Leftrightarrow': u'⇔', u'\\Longmapsfrom': u'⟽', u'\\Longmapsto': u'⟾', - u'\\MapsDown': u'↧', u'\\MapsUp': u'↥', u'\\Nearrow': u'⇗', - u'\\NestedGreaterGreater': u'⪢', u'\\NestedLessLess': u'⪡', - u'\\NotGreaterLess': u'≹', u'\\NotGreaterTilde': u'≵', - u'\\NotLessTilde': u'≴', u'\\Nwarrow': u'⇖', u'\\Proportion': u'∷', - u'\\RightArrowBar': u'⇥', u'\\RightDownTeeVector': u'⥝', - u'\\RightDownVectorBar': u'⥕', u'\\RightTeeVector': u'⥛', - u'\\RightTriangleBar': u'⧐', u'\\RightUpTeeVector': u'⥜', - u'\\RightUpVectorBar': u'⥔', u'\\RightVectorBar': u'⥓', - u'\\Rightarrow': u'⇒', u'\\Same': u'⩶', u'\\Searrow': u'⇘', - u'\\Swarrow': u'⇙', u'\\Top': u'⫪', u'\\UpArrowBar': u'⤒', u'\\VDash': u'⊫', - u'\\approx': u'≈', u'\\approxeq': u'≊', u'\\backsim': u'∽', u'\\barin': u'⋶', - u'\\barleftharpoon': u'⥫', u'\\barrightharpoon': u'⥭', u'\\bij': u'⤖', - u'\\coloneq': u'≔', u'\\corresponds': u'≙', u'\\curlyeqprec': u'⋞', - u'\\curlyeqsucc': u'⋟', u'\\dashrightarrow': u'⇢', u'\\dlsh': u'↲', - u'\\downdownharpoons': u'⥥', u'\\downuparrows': u'⇵', - u'\\downupharpoons': u'⥯', u'\\drsh': u'↳', u'\\eqslantgtr': u'⪖', - u'\\eqslantless': u'⪕', u'\\equiv': u'≡', u'\\ffun': u'⇻', u'\\finj': u'⤕', - u'\\ge': u'≥', u'\\geq': u'≥', u'\\ggcurly': u'⪼', u'\\gnapprox': u'⪊', - u'\\gneq': u'⪈', u'\\gtrapprox': u'⪆', u'\\hash': u'⋕', u'\\iddots': u'⋰', - u'\\implies': u' ⇒ ', u'\\in': u'∈', u'\\le': u'≤', u'\\leftarrow': u'←', - u'\\leftarrowtriangle': u'⇽', u'\\leftbarharpoon': u'⥪', - u'\\leftrightarrowtriangle': u'⇿', u'\\leftrightharpoon': u'⥊', - u'\\leftrightharpoondown': u'⥐', u'\\leftrightharpoonup': u'⥎', - u'\\leftrightsquigarrow': u'↭', u'\\leftslice': u'⪦', - u'\\leftsquigarrow': u'⇜', u'\\leftupdownharpoon': u'⥑', u'\\leq': u'≤', - u'\\lessapprox': u'⪅', u'\\llcurly': u'⪻', u'\\lnapprox': u'⪉', - u'\\lneq': u'⪇', u'\\longmapsfrom': u'⟻', u'\\multimapboth': u'⧟', - u'\\multimapdotbothA': u'⊶', u'\\multimapdotbothB': u'⊷', - u'\\multimapinv': u'⟜', u'\\nVdash': u'⊮', u'\\ne': u'≠', u'\\neq': u'≠', - u'\\ngeq': u'≱', u'\\nleq': u'≰', u'\\nni': u'∌', u'\\not\\in': u'∉', - u'\\notasymp': u'≭', u'\\npreceq': u'⋠', u'\\nsqsubseteq': u'⋢', - u'\\nsqsupseteq': u'⋣', u'\\nsubset': u'⊄', u'\\nsucceq': u'⋡', - u'\\pfun': u'⇸', u'\\pinj': u'⤔', u'\\precapprox': u'⪷', u'\\preceqq': u'⪳', - u'\\precnapprox': u'⪹', u'\\precnsim': u'⋨', u'\\propto': u'∝', - u'\\psur': u'⤀', u'\\rightarrow': u'→', u'\\rightarrowtriangle': u'⇾', - u'\\rightbarharpoon': u'⥬', u'\\rightleftharpoon': u'⥋', - u'\\rightslice': u'⪧', u'\\rightsquigarrow': u'⇝', - u'\\rightupdownharpoon': u'⥏', u'\\sim': u'~', u'\\strictfi': u'⥼', - u'\\strictif': u'⥽', u'\\subset': u'⊂', u'\\subseteq': u'⊆', - u'\\subsetneq': u'⊊', u'\\succapprox': u'⪸', u'\\succeqq': u'⪴', - u'\\succnapprox': u'⪺', u'\\supset': u'⊃', u'\\supseteq': u'⊇', - u'\\supsetneq': u'⊋', u'\\times': u'×', u'\\to': u'→', - u'\\updownarrows': u'⇅', u'\\updownharpoons': u'⥮', u'\\upupharpoons': u'⥣', - u'\\vartriangleleft': u'⊲', u'\\vartriangleright': u'⊳', - } - - starts = { - u'beginafter': u'}', u'beginbefore': u'\\begin{', u'bracket': u'{', - u'command': u'\\', u'comment': u'%', u'complex': u'\\[', u'simple': u'$', - u'squarebracket': u'[', u'unnumbered': u'*', - } - - symbolfunctions = { - u'^': u'sup', u'_': u'sub', - } - - textfunctions = { - u'\\mbox': u'span class="mbox"', u'\\text': u'span class="text"', - u'\\textbf': u'b', u'\\textipa': u'span class="textipa"', u'\\textit': u'i', - u'\\textnormal': u'span class="textnormal"', - u'\\textrm': u'span class="textrm"', - u'\\textsc': u'span class="versalitas"', - u'\\textsf': u'span class="textsf"', u'\\textsl': u'i', u'\\texttt': u'tt', - u'\\textup': u'span class="normal"', - } - - unmodified = { - u'characters': [u'.', u'*', u'€', u'(', u')', u'[', u']', u'·', u'!', u';', u'|', u'§', u'"',], - } - - urls = { - u'googlecharts': u'http://chart.googleapis.com/chart?cht=tx&chl=', - } - -class GeneralConfig(object): - "Configuration class from elyxer.config file" - - version = { - u'date': u'2015-02-26', u'lyxformat': u'413', u'number': u'1.2.5', - } - -class HeaderConfig(object): - "Configuration class from elyxer.config file" - - parameters = { - u'beginpreamble': u'\\begin_preamble', u'branch': u'\\branch', - u'documentclass': u'\\textclass', u'endbranch': u'\\end_branch', - u'endpreamble': u'\\end_preamble', u'language': u'\\language', - u'lstset': u'\\lstset', u'outputchanges': u'\\output_changes', - u'paragraphseparation': u'\\paragraph_separation', - u'pdftitle': u'\\pdf_title', u'secnumdepth': u'\\secnumdepth', - u'tocdepth': u'\\tocdepth', - } - - styles = { - u'article': [u'article', u'aastex', u'aapaper', u'acmsiggraph', u'sigplanconf', u'achemso', u'amsart', u'apa', u'arab-article', u'armenian-article', u'article-beamer', u'chess', u'dtk', u'elsarticle', u'heb-article', u'IEEEtran', u'iopart', u'kluwer', u'scrarticle-beamer', u'scrartcl', u'extarticle', u'paper', u'mwart', u'revtex4', u'spie', u'svglobal3', u'ltugboat', u'agu-dtd', u'jgrga', u'agums', u'entcs', u'egs', u'ijmpc', u'ijmpd', u'singlecol-new', u'doublecol-new', u'isprs', u'tarticle', u'jsarticle', u'jarticle', u'jss', u'literate-article', u'siamltex', u'cl2emult', u'llncs', u'svglobal', u'svjog', u'svprobth',], - u'book': [u'book', u'amsbook', u'scrbook', u'extbook', u'tufte-book', u'report', u'extreport', u'scrreprt', u'memoir', u'tbook', u'jsbook', u'jbook', u'mwbk', u'svmono', u'svmult', u'treport', u'jreport', u'mwrep',], - } - -class ImageConfig(object): - "Configuration class from elyxer.config file" - - converters = { - u'imagemagick': u'convert[ -density $scale][ -define $format:use-cropbox=true] "$input" "$output"', - u'inkscape': u'inkscape "$input" --export-png="$output"', - u'lyx': u'lyx -C "$input" "$output"', - } - - cropboxformats = { - u'.eps': u'ps', u'.pdf': u'pdf', u'.ps': u'ps', - } - - formats = { - u'default': u'.png', u'vector': [u'.svg', u'.eps',], - } - -class LayoutConfig(object): - "Configuration class from elyxer.config file" - - groupable = { - u'allowed': [u'StringContainer', u'Constant', u'TaggedText', u'Align', u'TextFamily', u'EmphaticText', u'VersalitasText', u'BarredText', u'SizeText', u'ColorText', u'LangLine', u'Formula',], - } - -class NewfangleConfig(object): - "Configuration class from elyxer.config file" - - constants = { - u'chunkref': u'chunkref{', u'endcommand': u'}', u'endmark': u'>', - u'startcommand': u'\\', u'startmark': u'=<', - } - -class NumberingConfig(object): - "Configuration class from elyxer.config file" - - layouts = { - u'ordered': [u'Chapter', u'Section', u'Subsection', u'Subsubsection', u'Paragraph',], - u'roman': [u'Part', u'Book',], - } - - sequence = { - u'symbols': [u'*', u'**', u'†', u'‡', u'§', u'§§', u'¶', u'¶¶', u'#', u'##',], - } - -class StyleConfig(object): - "Configuration class from elyxer.config file" - - hspaces = { - u'\\enskip{}': u' ', u'\\hfill{}': u'<span class="hfill"> </span>', - u'\\hspace*{\\fill}': u' ', u'\\hspace*{}': u'', u'\\hspace{}': u' ', - u'\\negthinspace{}': u'', u'\\qquad{}': u'  ', u'\\quad{}': u' ', - u'\\space{}': u' ', u'\\thinspace{}': u' ', u'~': u' ', - } - - quotes = { - u'ald': u'»', u'als': u'›', u'ard': u'«', u'ars': u'‹', u'eld': u'“', - u'els': u'‘', u'erd': u'”', u'ers': u'’', u'fld': u'«', - u'fls': u'‹', u'frd': u'»', u'frs': u'›', u'gld': u'„', u'gls': u'‚', - u'grd': u'“', u'grs': u'‘', u'pld': u'„', u'pls': u'‚', u'prd': u'”', - u'prs': u'’', u'sld': u'”', u'srd': u'”', - } - - referenceformats = { - u'eqref': u'(@↕)', u'formatted': u'¶↕', u'nameref': u'$↕', u'pageref': u'#↕', - u'ref': u'@↕', u'vpageref': u'on-page#↕', u'vref': u'@on-page#↕', - } - - size = { - u'ignoredtexts': [u'col', u'text', u'line', u'page', u'theight', u'pheight',], - } - - vspaces = { - u'bigskip': u'<div class="bigskip"> </div>', - u'defskip': u'<div class="defskip"> </div>', - u'medskip': u'<div class="medskip"> </div>', - u'smallskip': u'<div class="smallskip"> </div>', - u'vfill': u'<div class="vfill"> </div>', - } - -class TOCConfig(object): - "Configuration class from elyxer.config file" - - extractplain = { - u'allowed': [u'StringContainer', u'Constant', u'TaggedText', u'Align', u'TextFamily', u'EmphaticText', u'VersalitasText', u'BarredText', u'SizeText', u'ColorText', u'LangLine', u'Formula',], - u'cloned': [u'',], u'extracted': [u'',], - } - - extracttitle = { - u'allowed': [u'StringContainer', u'Constant', u'Space',], - u'cloned': [u'TextFamily', u'EmphaticText', u'VersalitasText', u'BarredText', u'SizeText', u'ColorText', u'LangLine', u'Formula',], - u'extracted': [u'PlainLayout', u'TaggedText', u'Align', u'Caption', u'StandardLayout', u'FlexInset',], - } - -class TagConfig(object): - "Configuration class from elyxer.config file" - - barred = { - u'under': u'u', - } - - family = { - u'sans': u'span class="sans"', u'typewriter': u'tt', - } - - flex = { - u'CharStyle:Code': u'span class="code"', - u'CharStyle:MenuItem': u'span class="menuitem"', - u'Code': u'span class="code"', u'MenuItem': u'span class="menuitem"', - u'Noun': u'span class="noun"', u'Strong': u'span class="strong"', - } - - group = { - u'layouts': [u'Quotation', u'Quote',], - } - - layouts = { - u'Center': u'div', u'Chapter': u'h?', u'Date': u'h2', u'Paragraph': u'div', - u'Part': u'h1', u'Quotation': u'blockquote', u'Quote': u'blockquote', - u'Section': u'h?', u'Subsection': u'h?', u'Subsubsection': u'h?', - } - - listitems = { - u'Enumerate': u'ol', u'Itemize': u'ul', - } - - notes = { - u'Comment': u'', u'Greyedout': u'span class="greyedout"', u'Note': u'', - } - - script = { - u'subscript': u'sub', u'superscript': u'sup', - } - - shaped = { - u'italic': u'i', u'slanted': u'i', u'smallcaps': u'span class="versalitas"', - } - -class TranslationConfig(object): - "Configuration class from elyxer.config file" - - constants = { - u'Appendix': u'Appendix', u'Book': u'Book', u'Chapter': u'Chapter', - u'Paragraph': u'Paragraph', u'Part': u'Part', u'Section': u'Section', - u'Subsection': u'Subsection', u'Subsubsection': u'Subsubsection', - u'abstract': u'Abstract', u'bibliography': u'Bibliography', - u'figure': u'figure', u'float-algorithm': u'Algorithm ', - u'float-figure': u'Figure ', u'float-listing': u'Listing ', - u'float-table': u'Table ', u'float-tableau': u'Tableau ', - u'footnotes': u'Footnotes', u'generated-by': u'Document generated by ', - u'generated-on': u' on ', u'index': u'Index', - u'jsmath-enable': u'Please enable JavaScript on your browser.', - u'jsmath-requires': u' requires JavaScript to correctly process the mathematics on this page. ', - u'jsmath-warning': u'Warning: ', u'list-algorithm': u'List of Algorithms', - u'list-figure': u'List of Figures', u'list-table': u'List of Tables', - u'list-tableau': u'List of Tableaux', u'main-page': u'Main page', - u'next': u'Next', u'nomenclature': u'Nomenclature', - u'on-page': u' on page ', u'prev': u'Prev', u'references': u'References', - u'toc': u'Table of Contents', u'toc-for': u'Contents for ', u'up': u'Up', - } - - languages = { - u'american': u'en', u'british': u'en', u'deutsch': u'de', u'dutch': u'nl', - u'english': u'en', u'french': u'fr', u'ngerman': u'de', u'russian': u'ru', - u'spanish': u'es', - } - - -class CommandLineParser(object): - "A parser for runtime options" - - def __init__(self, options): - self.options = options - - def parseoptions(self, args): - "Parse command line options" - if len(args) == 0: - return None - while len(args) > 0 and args[0].startswith('--'): - key, value = self.readoption(args) - if not key: - return 'Option ' + value + ' not recognized' - if not value: - return 'Option ' + key + ' needs a value' - setattr(self.options, key, value) - return None - - def readoption(self, args): - "Read the key and value for an option" - arg = args[0][2:] - del args[0] - if '=' in arg: - key = self.readequalskey(arg, args) - else: - key = arg.replace('-', '') - if not hasattr(self.options, key): - return None, key - current = getattr(self.options, key) - if isinstance(current, bool): - return key, True - # read value - if len(args) == 0: - return key, None - if args[0].startswith('"'): - initial = args[0] - del args[0] - return key, self.readquoted(args, initial) - value = args[0].decode('utf-8') - del args[0] - if isinstance(current, list): - current.append(value) - return key, current - return key, value - - def readquoted(self, args, initial): - "Read a value between quotes" - Trace.error('Oops') - value = initial[1:] - while len(args) > 0 and not args[0].endswith('"') and not args[0].startswith('--'): - Trace.error('Appending ' + args[0]) - value += ' ' + args[0] - del args[0] - if len(args) == 0 or args[0].startswith('--'): - return None - value += ' ' + args[0:-1] - return value - - def readequalskey(self, arg, args): - "Read a key using equals" - split = arg.split('=', 1) - key = split[0] - value = split[1] - args.insert(0, value) - return key - - -class Options(object): - "A set of runtime options" - - instance = None - - location = None - nocopy = False - copyright = False - debug = False - quiet = False - version = False - hardversion = False - versiondate = False - html = False - help = False - showlines = True - unicode = False - iso885915 = False - css = [] - favicon = '' - title = None - directory = None - destdirectory = None - toc = False - toctarget = '' - tocfor = None - forceformat = None - lyxformat = False - target = None - splitpart = None - memory = True - lowmem = False - nobib = False - converter = 'imagemagick' - raw = False - jsmath = None - mathjax = None - nofooter = False - simplemath = False - template = None - noconvert = False - notoclabels = False - letterfoot = True - numberfoot = False - symbolfoot = False - hoverfoot = True - marginfoot = False - endfoot = False - supfoot = True - alignfoot = False - footnotes = None - imageformat = None - copyimages = False - googlecharts = False - embedcss = [] - - branches = dict() - - def parseoptions(self, args): - "Parse command line options" - Options.location = args[0] - del args[0] - parser = CommandLineParser(Options) - result = parser.parseoptions(args) - if result: - Trace.error(result) - self.usage() - self.processoptions() - - def processoptions(self): - "Process all options parsed." - if Options.help: - self.usage() - if Options.version: - self.showversion() - if Options.hardversion: - self.showhardversion() - if Options.versiondate: - self.showversiondate() - if Options.lyxformat: - self.showlyxformat() - if Options.splitpart: - try: - Options.splitpart = int(Options.splitpart) - if Options.splitpart <= 0: - Trace.error('--splitpart requires a number bigger than zero') - self.usage() - except: - Trace.error('--splitpart needs a numeric argument, not ' + Options.splitpart) - self.usage() - if Options.lowmem or Options.toc or Options.tocfor: - Options.memory = False - self.parsefootnotes() - if Options.forceformat and not Options.imageformat: - Options.imageformat = Options.forceformat - if Options.imageformat == 'copy': - Options.copyimages = True - if Options.css == []: - Options.css = ['http://elyxer.nongnu.org/lyx.css'] - if Options.favicon == '': - pass # no default favicon - if Options.html: - Options.simplemath = True - if Options.toc and not Options.tocfor: - Trace.error('Option --toc is deprecated; use --tocfor "page" instead') - Options.tocfor = Options.toctarget - if Options.nocopy: - Trace.error('Option --nocopy is deprecated; it is no longer needed') - if Options.jsmath: - Trace.error('Option --jsmath is deprecated; use --mathjax instead') - # set in Trace if necessary - for param in dir(Trace): - if param.endswith('mode'): - setattr(Trace, param, getattr(self, param[:-4])) - - def usage(self): - "Show correct usage" - Trace.error('Usage: ' + os.path.basename(Options.location) + ' [options] [filein] [fileout]') - Trace.error('Convert LyX input file "filein" to HTML file "fileout".') - Trace.error('If filein (or fileout) is not given use standard input (or output).') - Trace.error('Main program of the eLyXer package (http://elyxer.nongnu.org/).') - self.showoptions() - - def parsefootnotes(self): - "Parse footnotes options." - if not Options.footnotes: - return - Options.marginfoot = False - Options.letterfoot = False - Options.hoverfoot = False - options = Options.footnotes.split(',') - for option in options: - footoption = option + 'foot' - if hasattr(Options, footoption): - setattr(Options, footoption, True) - else: - Trace.error('Unknown footnotes option: ' + option) - if not Options.endfoot and not Options.marginfoot and not Options.hoverfoot: - Options.hoverfoot = True - if not Options.numberfoot and not Options.symbolfoot: - Options.letterfoot = True - - def showoptions(self): - "Show all possible options" - Trace.error(' Common options:') - Trace.error(' --help: show this online help') - Trace.error(' --quiet: disables all runtime messages') - Trace.error('') - Trace.error(' Advanced options:') - Trace.error(' --debug: enable debugging messages (for developers)') - Trace.error(' --version: show version number and release date') - Trace.error(' --lyxformat: return the highest LyX version supported') - Trace.error(' Options for HTML output:') - Trace.error(' --title "title": set the generated page title') - Trace.error(' --css "file.css": use a custom CSS file') - Trace.error(' --embedcss "file.css": embed styles from a CSS file into the output') - Trace.error(' --favicon "icon.ico": insert the specified favicon in the header.') - Trace.error(' --html: output HTML 4.0 instead of the default XHTML') - Trace.error(' --unicode: full Unicode output') - Trace.error(' --iso885915: output a document with ISO-8859-15 encoding') - Trace.error(' --nofooter: remove the footer "generated by eLyXer"') - Trace.error(' --simplemath: do not generate fancy math constructions') - Trace.error(' Options for image output:') - Trace.error(' --directory "img_dir": look for images in the specified directory') - Trace.error(' --destdirectory "dest": put converted images into this directory') - Trace.error(' --imageformat ".ext": image output format, or "copy" to copy images') - Trace.error(' --noconvert: do not convert images, use in original locations') - Trace.error(' --converter "inkscape": use an alternative program to convert images') - Trace.error(' Options for footnote display:') - Trace.error(' --numberfoot: mark footnotes with numbers instead of letters') - Trace.error(' --symbolfoot: mark footnotes with symbols (*, **...)') - Trace.error(' --hoverfoot: show footnotes as hovering text (default)') - Trace.error(' --marginfoot: show footnotes on the page margin') - Trace.error(' --endfoot: show footnotes at the end of the page') - Trace.error(' --supfoot: use superscript for footnote markers (default)') - Trace.error(' --alignfoot: use aligned text for footnote markers') - Trace.error(' --footnotes "options": specify several comma-separated footnotes options') - Trace.error(' Available options are: "number", "symbol", "hover", "margin", "end",') - Trace.error(' "sup", "align"') - Trace.error(' Advanced output options:') - Trace.error(' --splitpart "depth": split the resulting webpage at the given depth') - Trace.error(' --tocfor "page": generate a TOC that points to the given page') - Trace.error(' --target "frame": make all links point to the given frame') - Trace.error(' --notoclabels: omit the part labels in the TOC, such as Chapter') - Trace.error(' --lowmem: do the conversion on the fly (conserve memory)') - Trace.error(' --raw: generate HTML without header or footer.') - Trace.error(' --mathjax remote: use MathJax remotely to display equations') - Trace.error(' --mathjax "URL": use MathJax from the given URL to display equations') - Trace.error(' --googlecharts: use Google Charts to generate formula images') - Trace.error(' --template "file": use a template, put everything in <!--$content-->') - Trace.error(' --copyright: add a copyright notice at the bottom') - Trace.error(' Deprecated options:') - Trace.error(' --toc: (deprecated) create a table of contents') - Trace.error(' --toctarget "page": (deprecated) generate a TOC for the given page') - Trace.error(' --nocopy: (deprecated) maintained for backwards compatibility') - Trace.error(' --jsmath "URL": use jsMath from the given URL to display equations') - sys.exit() - - def showversion(self): - "Return the current eLyXer version string" - string = 'eLyXer version ' + GeneralConfig.version['number'] - string += ' (' + GeneralConfig.version['date'] + ')' - Trace.error(string) - sys.exit() - - def showhardversion(self): - "Return just the version string" - Trace.message(GeneralConfig.version['number']) - sys.exit() - - def showversiondate(self): - "Return just the version dte" - Trace.message(GeneralConfig.version['date']) - sys.exit() - - def showlyxformat(self): - "Return just the lyxformat parameter" - Trace.message(GeneralConfig.version['lyxformat']) - sys.exit() - -class BranchOptions(object): - "A set of options for a branch" - - def __init__(self, name): - self.name = name - self.options = {'color':'#ffffff'} - - def set(self, key, value): - "Set a branch option" - if not key.startswith(ContainerConfig.string['startcommand']): - Trace.error('Invalid branch option ' + key) - return - key = key.replace(ContainerConfig.string['startcommand'], '') - self.options[key] = value - - def isselected(self): - "Return if the branch is selected" - if not 'selected' in self.options: - return False - return self.options['selected'] == '1' - - def __unicode__(self): - "String representation" - return 'options for ' + self.name + ': ' + unicode(self.options) - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class Cloner(object): - "An object used to clone other objects." - - def clone(cls, original): - "Return an exact copy of an object." - "The original object must have an empty constructor." - return cls.create(original.__class__) - - def create(cls, type): - "Create an object of a given class." - clone = type.__new__(type) - clone.__init__() - return clone - - clone = classmethod(clone) - create = classmethod(create) - -class ContainerExtractor(object): - "A class to extract certain containers." - - def __init__(self, config): - "The config parameter is a map containing three lists: allowed, copied and extracted." - "Each of the three is a list of class names for containers." - "Allowed containers are included as is into the result." - "Cloned containers are cloned and placed into the result." - "Extracted containers are looked into." - "All other containers are silently ignored." - self.allowed = config['allowed'] - self.cloned = config['cloned'] - self.extracted = config['extracted'] - - def extract(self, container): - "Extract a group of selected containers from elyxer.a container." - list = [] - locate = lambda c: c.__class__.__name__ in self.allowed + self.cloned - recursive = lambda c: c.__class__.__name__ in self.extracted - process = lambda c: self.process(c, list) - container.recursivesearch(locate, recursive, process) - return list - - def process(self, container, list): - "Add allowed containers, clone cloned containers and add the clone." - name = container.__class__.__name__ - if name in self.allowed: - list.append(container) - elif name in self.cloned: - list.append(self.safeclone(container)) - else: - Trace.error('Unknown container class ' + name) - - def safeclone(self, container): - "Return a new container with contents only in a safe list, recursively." - clone = Cloner.clone(container) - clone.output = container.output - clone.contents = self.extract(container) - return clone - - - - - - -class Parser(object): - "A generic parser" - - def __init__(self): - self.begin = 0 - self.parameters = dict() - - def parseheader(self, reader): - "Parse the header" - header = reader.currentline().split() - reader.nextline() - self.begin = reader.linenumber - return header - - def parseparameter(self, reader): - "Parse a parameter" - if reader.currentline().strip().startswith('<'): - key, value = self.parsexml(reader) - self.parameters[key] = value - return - split = reader.currentline().strip().split(' ', 1) - reader.nextline() - if len(split) == 0: - return - key = split[0] - if len(split) == 1: - self.parameters[key] = True - return - if not '"' in split[1]: - self.parameters[key] = split[1].strip() - return - doublesplit = split[1].split('"') - self.parameters[key] = doublesplit[1] - - def parsexml(self, reader): - "Parse a parameter in xml form: <param attr1=value...>" - strip = reader.currentline().strip() - reader.nextline() - if not strip.endswith('>'): - Trace.error('XML parameter ' + strip + ' should be <...>') - split = strip[1:-1].split() - if len(split) == 0: - Trace.error('Empty XML parameter <>') - return None, None - key = split[0] - del split[0] - if len(split) == 0: - return key, dict() - attrs = dict() - for attr in split: - if not '=' in attr: - Trace.error('Erroneous attribute for ' + key + ': ' + attr) - attr += '="0"' - parts = attr.split('=') - attrkey = parts[0] - value = parts[1].split('"')[1] - attrs[attrkey] = value - return key, attrs - - def parseending(self, reader, process): - "Parse until the current ending is found" - if not self.ending: - Trace.error('No ending for ' + unicode(self)) - return - while not reader.currentline().startswith(self.ending): - process() - - def parsecontainer(self, reader, contents): - container = self.factory.createcontainer(reader) - if container: - container.parent = self.parent - contents.append(container) - - def __unicode__(self): - "Return a description" - return self.__class__.__name__ + ' (' + unicode(self.begin) + ')' - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class LoneCommand(Parser): - "A parser for just one command line" - - def parse(self, reader): - "Read nothing" - return [] - -class TextParser(Parser): - "A parser for a command and a bit of text" - - stack = [] - - def __init__(self, container): - Parser.__init__(self) - self.ending = None - if container.__class__.__name__ in ContainerConfig.endings: - self.ending = ContainerConfig.endings[container.__class__.__name__] - self.endings = [] - - def parse(self, reader): - "Parse lines as long as they are text" - TextParser.stack.append(self.ending) - self.endings = TextParser.stack + [ContainerConfig.endings['Layout'], - ContainerConfig.endings['Inset'], self.ending] - contents = [] - while not self.isending(reader): - self.parsecontainer(reader, contents) - return contents - - def isending(self, reader): - "Check if text is ending" - current = reader.currentline().split() - if len(current) == 0: - return False - if current[0] in self.endings: - if current[0] in TextParser.stack: - TextParser.stack.remove(current[0]) - else: - TextParser.stack = [] - return True - return False - -class ExcludingParser(Parser): - "A parser that excludes the final line" - - def parse(self, reader): - "Parse everything up to (and excluding) the final line" - contents = [] - self.parseending(reader, lambda: self.parsecontainer(reader, contents)) - return contents - -class BoundedParser(ExcludingParser): - "A parser bound by a final line" - - def parse(self, reader): - "Parse everything, including the final line" - contents = ExcludingParser.parse(self, reader) - # skip last line - reader.nextline() - return contents - -class BoundedDummy(Parser): - "A bound parser that ignores everything" - - def parse(self, reader): - "Parse the contents of the container" - self.parseending(reader, lambda: reader.nextline()) - # skip last line - reader.nextline() - return [] - -class StringParser(Parser): - "Parses just a string" - - def parseheader(self, reader): - "Do nothing, just take note" - self.begin = reader.linenumber + 1 - return [] - - def parse(self, reader): - "Parse a single line" - contents = reader.currentline() - reader.nextline() - return contents - -class InsetParser(BoundedParser): - "Parses a LyX inset" - - def parse(self, reader): - "Parse inset parameters into a dictionary" - startcommand = ContainerConfig.string['startcommand'] - while reader.currentline() != '' and not reader.currentline().startswith(startcommand): - self.parseparameter(reader) - return BoundedParser.parse(self, reader) - - - - - - -class ContainerOutput(object): - "The generic HTML output for a container." - - def gethtml(self, container): - "Show an error." - Trace.error('gethtml() not implemented for ' + unicode(self)) - - def isempty(self): - "Decide if the output is empty: by default, not empty." - return False - -class EmptyOutput(ContainerOutput): - - def gethtml(self, container): - "Return empty HTML code." - return [] - - def isempty(self): - "This output is particularly empty." - return True - -class FixedOutput(ContainerOutput): - "Fixed output" - - def gethtml(self, container): - "Return constant HTML code" - return container.html - -class ContentsOutput(ContainerOutput): - "Outputs the contents converted to HTML" - - def gethtml(self, container): - "Return the HTML code" - html = [] - if container.contents == None: - return html - for element in container.contents: - if not hasattr(element, 'gethtml'): - Trace.error('No html in ' + element.__class__.__name__ + ': ' + unicode(element)) - return html - html += element.gethtml() - return html - -class TaggedOutput(ContentsOutput): - "Outputs an HTML tag surrounding the contents." - - tag = None - breaklines = False - empty = False - - def settag(self, tag, breaklines=False, empty=False): - "Set the value for the tag and other attributes." - self.tag = tag - if breaklines: - self.breaklines = breaklines - if empty: - self.empty = empty - return self - - def setbreaklines(self, breaklines): - "Set the value for breaklines." - self.breaklines = breaklines - return self - - def gethtml(self, container): - "Return the HTML code." - if self.empty: - return [self.selfclosing(container)] - html = [self.open(container)] - html += ContentsOutput.gethtml(self, container) - html.append(self.close(container)) - return html - - def open(self, container): - "Get opening line." - if not self.checktag(container): - return '' - open = '<' + self.tag + '>' - if self.breaklines: - return open + '\n' - return open - - def close(self, container): - "Get closing line." - if not self.checktag(container): - return '' - close = '</' + self.tag.split()[0] + '>' - if self.breaklines: - return '\n' + close + '\n' - return close - - def selfclosing(self, container): - "Get self-closing line." - if not self.checktag(container): - return '' - selfclosing = '<' + self.tag + '/>' - if self.breaklines: - return selfclosing + '\n' - return selfclosing - - def checktag(self, container): - "Check that the tag is valid." - if not self.tag: - Trace.error('No tag in ' + unicode(container)) - return False - if self.tag == '': - return False - return True - -class FilteredOutput(ContentsOutput): - "Returns the output in the contents, but filtered:" - "some strings are replaced by others." - - def __init__(self): - "Initialize the filters." - self.filters = [] - - def addfilter(self, original, replacement): - "Add a new filter: replace the original by the replacement." - self.filters.append((original, replacement)) - - def gethtml(self, container): - "Return the HTML code" - result = [] - html = ContentsOutput.gethtml(self, container) - for line in html: - result.append(self.filter(line)) - return result - - def filter(self, line): - "Filter a single line with all available filters." - for original, replacement in self.filters: - if original in line: - line = line.replace(original, replacement) - return line - -class StringOutput(ContainerOutput): - "Returns a bare string as output" - - def gethtml(self, container): - "Return a bare string" - return [container.string] - - -class LineReader(object): - "Reads a file line by line" - - def __init__(self, filename): - if isinstance(filename, file): - self.file = filename - else: - self.file = codecs.open(filename, 'rU', 'utf-8') - self.linenumber = 1 - self.lastline = None - self.current = None - self.mustread = True - self.depleted = False - try: - self.readline() - except UnicodeDecodeError: - # try compressed file - import gzip - self.file = gzip.open(filename, 'rb') - self.readline() - - def setstart(self, firstline): - "Set the first line to read." - for i in range(firstline): - self.file.readline() - self.linenumber = firstline - - def setend(self, lastline): - "Set the last line to read." - self.lastline = lastline - - def currentline(self): - "Get the current line" - if self.mustread: - self.readline() - return self.current - - def nextline(self): - "Go to next line" - if self.depleted: - Trace.fatal('Read beyond file end') - self.mustread = True - - def readline(self): - "Read a line from elyxer.file" - self.current = self.file.readline() - if not isinstance(self.file, codecs.StreamReaderWriter): - self.current = self.current.decode('utf-8') - if len(self.current) == 0: - self.depleted = True - self.current = self.current.rstrip('\n\r') - self.linenumber += 1 - self.mustread = False - Trace.prefix = 'Line ' + unicode(self.linenumber) + ': ' - if self.linenumber % 1000 == 0: - Trace.message('Parsing') - - def finished(self): - "Find out if the file is finished" - if self.lastline and self.linenumber == self.lastline: - return True - if self.mustread: - self.readline() - return self.depleted - - def close(self): - self.file.close() - -class LineWriter(object): - "Writes a file as a series of lists" - - file = False - - def __init__(self, filename): - if isinstance(filename, file): - self.file = filename - self.filename = None - else: - self.filename = filename - - def write(self, strings): - "Write a list of strings" - for string in strings: - if not isinstance(string, basestring): - Trace.error('Not a string: ' + unicode(string) + ' in ' + unicode(strings)) - return - self.writestring(string) - - def writestring(self, string): - "Write a string" - if not self.file: - self.file = codecs.open(self.filename, 'w', "utf-8") - if self.file == sys.stdout and sys.version_info < (3, 0): - string = string.encode('utf-8') - self.file.write(string) - - def writeline(self, line): - "Write a line to file" - self.writestring(line + '\n') - - def close(self): - self.file.close() - - - - - - -class Globable(object): - """A bit of text which can be globbed (lumped together in bits). - Methods current(), skipcurrent(), checkfor() and isout() have to be - implemented by subclasses.""" - - leavepending = False - - def __init__(self): - self.endinglist = EndingList() - - def checkbytemark(self): - "Check for a Unicode byte mark and skip it." - if self.finished(): - return - if ord(self.current()) == 0xfeff: - self.skipcurrent() - - def isout(self): - "Find out if we are out of the position yet." - Trace.error('Unimplemented isout()') - return True - - def current(self): - "Return the current character." - Trace.error('Unimplemented current()') - return '' - - def checkfor(self, string): - "Check for the given string in the current position." - Trace.error('Unimplemented checkfor()') - return False - - def finished(self): - "Find out if the current text has finished." - if self.isout(): - if not self.leavepending: - self.endinglist.checkpending() - return True - return self.endinglist.checkin(self) - - def skipcurrent(self): - "Return the current character and skip it." - Trace.error('Unimplemented skipcurrent()') - return '' - - def glob(self, currentcheck): - "Glob a bit of text that satisfies a check on the current char." - glob = '' - while not self.finished() and currentcheck(): - glob += self.skipcurrent() - return glob - - def globalpha(self): - "Glob a bit of alpha text" - return self.glob(lambda: self.current().isalpha()) - - def globnumber(self): - "Glob a row of digits." - return self.glob(lambda: self.current().isdigit()) - - def isidentifier(self): - "Return if the current character is alphanumeric or _." - if self.current().isalnum() or self.current() == '_': - return True - return False - - def globidentifier(self): - "Glob alphanumeric and _ symbols." - return self.glob(self.isidentifier) - - def isvalue(self): - "Return if the current character is a value character:" - "not a bracket or a space." - if self.current().isspace(): - return False - if self.current() in '{}()': - return False - return True - - def globvalue(self): - "Glob a value: any symbols but brackets." - return self.glob(self.isvalue) - - def skipspace(self): - "Skip all whitespace at current position." - return self.glob(lambda: self.current().isspace()) - - def globincluding(self, magicchar): - "Glob a bit of text up to (including) the magic char." - glob = self.glob(lambda: self.current() != magicchar) + magicchar - self.skip(magicchar) - return glob - - def globexcluding(self, excluded): - "Glob a bit of text up until (excluding) any excluded character." - return self.glob(lambda: self.current() not in excluded) - - def pushending(self, ending, optional = False): - "Push a new ending to the bottom" - self.endinglist.add(ending, optional) - - def popending(self, expected = None): - "Pop the ending found at the current position" - if self.isout() and self.leavepending: - return expected - ending = self.endinglist.pop(self) - if expected and expected != ending: - Trace.error('Expected ending ' + expected + ', got ' + ending) - self.skip(ending) - return ending - - def nextending(self): - "Return the next ending in the queue." - nextending = self.endinglist.findending(self) - if not nextending: - return None - return nextending.ending - -class EndingList(object): - "A list of position endings" - - def __init__(self): - self.endings = [] - - def add(self, ending, optional = False): - "Add a new ending to the list" - self.endings.append(PositionEnding(ending, optional)) - - def pickpending(self, pos): - "Pick any pending endings from a parse position." - self.endings += pos.endinglist.endings - - def checkin(self, pos): - "Search for an ending" - if self.findending(pos): - return True - return False - - def pop(self, pos): - "Remove the ending at the current position" - if pos.isout(): - Trace.error('No ending out of bounds') - return '' - ending = self.findending(pos) - if not ending: - Trace.error('No ending at ' + pos.current()) - return '' - for each in reversed(self.endings): - self.endings.remove(each) - if each == ending: - return each.ending - elif not each.optional: - Trace.error('Removed non-optional ending ' + each) - Trace.error('No endings left') - return '' - - def findending(self, pos): - "Find the ending at the current position" - if len(self.endings) == 0: - return None - for index, ending in enumerate(reversed(self.endings)): - if ending.checkin(pos): - return ending - if not ending.optional: - return None - return None - - def checkpending(self): - "Check if there are any pending endings" - if len(self.endings) != 0: - Trace.error('Pending ' + unicode(self) + ' left open') - - def __unicode__(self): - "Printable representation" - string = 'endings [' - for ending in self.endings: - string += unicode(ending) + ',' - if len(self.endings) > 0: - string = string[:-1] - return string + ']' - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class PositionEnding(object): - "An ending for a parsing position" - - def __init__(self, ending, optional): - self.ending = ending - self.optional = optional - - def checkin(self, pos): - "Check for the ending" - return pos.checkfor(self.ending) - - def __unicode__(self): - "Printable representation" - string = 'Ending ' + self.ending - if self.optional: - string += ' (optional)' - return string - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class Position(Globable): - """A position in a text to parse. - Including those in Globable, functions to implement by subclasses are: - skip(), identifier(), extract(), isout() and current().""" - - def __init__(self): - Globable.__init__(self) - - def skip(self, string): - "Skip a string" - Trace.error('Unimplemented skip()') - - def identifier(self): - "Return an identifier for the current position." - Trace.error('Unimplemented identifier()') - return 'Error' - - def extract(self, length): - "Extract the next string of the given length, or None if not enough text," - "without advancing the parse position." - Trace.error('Unimplemented extract()') - return None - - def checkfor(self, string): - "Check for a string at the given position." - return string == self.extract(len(string)) - - def checkforlower(self, string): - "Check for a string in lower case." - extracted = self.extract(len(string)) - if not extracted: - return False - return string.lower() == self.extract(len(string)).lower() - - def skipcurrent(self): - "Return the current character and skip it." - current = self.current() - self.skip(current) - return current - - def __next__(self): - "Advance the position and return the next character." - self.skipcurrent() - return self.current() - - if sys.version_info < (3, 0): - next = __next__ - - def checkskip(self, string): - "Check for a string at the given position; if there, skip it" - if not self.checkfor(string): - return False - self.skip(string) - return True - - def error(self, message): - "Show an error message and the position identifier." - Trace.error(message + ': ' + self.identifier()) - -class TextPosition(Position): - "A parse position based on a raw text." - - def __init__(self, text): - "Create the position from elyxer.some text." - Position.__init__(self) - self.pos = 0 - self.text = text - self.checkbytemark() - - def skip(self, string): - "Skip a string of characters." - self.pos += len(string) - - def identifier(self): - "Return a sample of the remaining text." - length = 30 - if self.pos + length > len(self.text): - length = len(self.text) - self.pos - return '*' + self.text[self.pos:self.pos + length] + '*' - - def isout(self): - "Find out if we are out of the text yet." - return self.pos >= len(self.text) - - def current(self): - "Return the current character, assuming we are not out." - return self.text[self.pos] - - def extract(self, length): - "Extract the next string of the given length, or None if not enough text." - if self.pos + length > len(self.text): - return None - return self.text[self.pos : self.pos + length] - -class FilePosition(Position): - "A parse position based on an underlying file." - - def __init__(self, filename): - "Create the position from a file." - Position.__init__(self) - self.reader = LineReader(filename) - self.pos = 0 - self.checkbytemark() - - def skip(self, string): - "Skip a string of characters." - length = len(string) - while self.pos + length > len(self.reader.currentline()): - length -= len(self.reader.currentline()) - self.pos + 1 - self.nextline() - self.pos += length - - def currentline(self): - "Get the current line of the underlying file." - return self.reader.currentline() - - def nextline(self): - "Go to the next line." - self.reader.nextline() - self.pos = 0 - - def linenumber(self): - "Return the line number of the file." - return self.reader.linenumber + 1 - - def identifier(self): - "Return the current line and line number in the file." - before = self.reader.currentline()[:self.pos - 1] - after = self.reader.currentline()[self.pos:] - return 'line ' + unicode(self.getlinenumber()) + ': ' + before + '*' + after - - def isout(self): - "Find out if we are out of the text yet." - if self.pos > len(self.reader.currentline()): - if self.pos > len(self.reader.currentline()) + 1: - Trace.error('Out of the line ' + self.reader.currentline() + ': ' + unicode(self.pos)) - self.nextline() - return self.reader.finished() - - def current(self): - "Return the current character, assuming we are not out." - if self.pos == len(self.reader.currentline()): - return '\n' - if self.pos > len(self.reader.currentline()): - Trace.error('Out of the line ' + self.reader.currentline() + ': ' + unicode(self.pos)) - return '*' - return self.reader.currentline()[self.pos] - - def extract(self, length): - "Extract the next string of the given length, or None if not enough text." - if self.pos + length > len(self.reader.currentline()): - return None - return self.reader.currentline()[self.pos : self.pos + length] - - - -class Container(object): - "A container for text and objects in a lyx file" - - partkey = None - parent = None - begin = None - - def __init__(self): - self.contents = list() - - def process(self): - "Process contents" - pass - - def gethtml(self): - "Get the resulting HTML" - html = self.output.gethtml(self) - if isinstance(html, basestring): - Trace.error('Raw string ' + html) - html = [html] - return self.escapeall(html) - - def escapeall(self, lines): - "Escape all lines in an array according to the output options." - result = [] - for line in lines: - if Options.html: - line = self.escape(line, EscapeConfig.html) - if Options.iso885915: - line = self.escape(line, EscapeConfig.iso885915) - line = self.escapeentities(line) - elif not Options.unicode: - line = self.escape(line, EscapeConfig.nonunicode) - result.append(line) - return result - - def escape(self, line, replacements = EscapeConfig.entities): - "Escape a line with replacements from elyxer.a map" - pieces = sorted(replacements.keys()) - # do them in order - for piece in pieces: - if piece in line: - line = line.replace(piece, replacements[piece]) - return line - - def escapeentities(self, line): - "Escape all Unicode characters to HTML entities." - result = '' - pos = TextPosition(line) - while not pos.finished(): - if ord(pos.current()) > 128: - codepoint = hex(ord(pos.current())) - if codepoint == '0xd835': - codepoint = hex(ord(next(pos)) + 0xf800) - result += '&#' + codepoint[1:] + ';' - else: - result += pos.current() - pos.skipcurrent() - return result - - def searchall(self, type): - "Search for all embedded containers of a given type" - list = [] - self.searchprocess(type, lambda container: list.append(container)) - return list - - def searchremove(self, type): - "Search for all containers of a type and remove them" - list = self.searchall(type) - for container in list: - container.parent.contents.remove(container) - return list - - def searchprocess(self, type, process): - "Search for elements of a given type and process them" - self.locateprocess(lambda container: isinstance(container, type), process) - - def locateprocess(self, locate, process): - "Search for all embedded containers and process them" - for container in self.contents: - container.locateprocess(locate, process) - if locate(container): - process(container) - - def recursivesearch(self, locate, recursive, process): - "Perform a recursive search in the container." - for container in self.contents: - if recursive(container): - container.recursivesearch(locate, recursive, process) - if locate(container): - process(container) - - def extracttext(self): - "Extract all text from elyxer.allowed containers." - result = '' - constants = ContainerExtractor(ContainerConfig.extracttext).extract(self) - for constant in constants: - result += constant.string - return result - - def group(self, index, group, isingroup): - "Group some adjoining elements into a group" - if index >= len(self.contents): - return - if hasattr(self.contents[index], 'grouped'): - return - while index < len(self.contents) and isingroup(self.contents[index]): - self.contents[index].grouped = True - group.contents.append(self.contents[index]) - self.contents.pop(index) - self.contents.insert(index, group) - - def remove(self, index): - "Remove a container but leave its contents" - container = self.contents[index] - self.contents.pop(index) - while len(container.contents) > 0: - self.contents.insert(index, container.contents.pop()) - - def tree(self, level = 0): - "Show in a tree" - Trace.debug(" " * level + unicode(self)) - for container in self.contents: - container.tree(level + 1) - - def getparameter(self, name): - "Get the value of a parameter, if present." - if not name in self.parameters: - return None - return self.parameters[name] - - def getparameterlist(self, name): - "Get the value of a comma-separated parameter as a list." - paramtext = self.getparameter(name) - if not paramtext: - return [] - return paramtext.split(',') - - def hasemptyoutput(self): - "Check if the parent's output is empty." - current = self.parent - while current: - if current.output.isempty(): - return True - current = current.parent - return False - - def __unicode__(self): - "Get a description" - if not self.begin: - return self.__class__.__name__ - return self.__class__.__name__ + '@' + unicode(self.begin) - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class BlackBox(Container): - "A container that does not output anything" - - def __init__(self): - self.parser = LoneCommand() - self.output = EmptyOutput() - self.contents = [] - -class LyXFormat(BlackBox): - "Read the lyxformat command" - - def process(self): - "Show warning if version < 276" - version = int(self.header[1]) - if version < 276: - Trace.error('Warning: unsupported old format version ' + str(version)) - if version > int(GeneralConfig.version['lyxformat']): - Trace.error('Warning: unsupported new format version ' + str(version)) - -class StringContainer(Container): - "A container for a single string" - - parsed = None - - def __init__(self): - self.parser = StringParser() - self.output = StringOutput() - self.string = '' - - def process(self): - "Replace special chars from elyxer.the contents." - if self.parsed: - self.string = self.replacespecial(self.parsed) - self.parsed = None - - def replacespecial(self, line): - "Replace all special chars from elyxer.a line" - replaced = self.escape(line, EscapeConfig.entities) - replaced = self.changeline(replaced) - if ContainerConfig.string['startcommand'] in replaced and len(replaced) > 1: - # unprocessed commands - if self.begin: - message = 'Unknown command at ' + unicode(self.begin) + ': ' - else: - message = 'Unknown command: ' - Trace.error(message + replaced.strip()) - return replaced - - def changeline(self, line): - line = self.escape(line, EscapeConfig.chars) - if not ContainerConfig.string['startcommand'] in line: - return line - line = self.escape(line, EscapeConfig.commands) - return line - - def extracttext(self): - "Return all text." - return self.string - - def __unicode__(self): - "Return a printable representation." - result = 'StringContainer' - if self.begin: - result += '@' + unicode(self.begin) - ellipsis = '...' - if len(self.string.strip()) <= 15: - ellipsis = '' - return result + ' (' + self.string.strip()[:15] + ellipsis + ')' - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class Constant(StringContainer): - "A constant string" - - def __init__(self, text): - self.contents = [] - self.string = text - self.output = StringOutput() - - def __unicode__(self): - return 'Constant: ' + self.string - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class TaggedText(Container): - "Text inside a tag" - - output = None - - def __init__(self): - self.parser = TextParser(self) - self.output = TaggedOutput() - - def complete(self, contents, tag, breaklines=False): - "Complete the tagged text and return it" - self.contents = contents - self.output.tag = tag - self.output.breaklines = breaklines - return self - - def constant(self, text, tag, breaklines=False): - "Complete the tagged text with a constant" - constant = Constant(text) - return self.complete([constant], tag, breaklines) - - def __unicode__(self): - "Return a printable representation." - if not hasattr(self.output, 'tag'): - return 'Emtpy tagged text' - if not self.output.tag: - return 'Tagged <unknown tag>' - return 'Tagged <' + self.output.tag + '>' - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class DocumentParameters(object): - "Global parameters for the document." - - pdftitle = None - indentstandard = False - tocdepth = 10 - startinglevel = 0 - maxdepth = 10 - language = None - bibliography = None - outputchanges = False - displaymode = False - - - - - - -class FormulaParser(Parser): - "Parses a formula" - - def parseheader(self, reader): - "See if the formula is inlined" - self.begin = reader.linenumber + 1 - type = self.parsetype(reader) - if not type: - reader.nextline() - type = self.parsetype(reader) - if not type: - Trace.error('Unknown formula type in ' + reader.currentline().strip()) - return ['unknown'] - return [type] - - def parsetype(self, reader): - "Get the formula type from the first line." - if reader.currentline().find(FormulaConfig.starts['simple']) >= 0: - return 'inline' - if reader.currentline().find(FormulaConfig.starts['complex']) >= 0: - return 'block' - if reader.currentline().find(FormulaConfig.starts['unnumbered']) >= 0: - return 'block' - if reader.currentline().find(FormulaConfig.starts['beginbefore']) >= 0: - return 'numbered' - return None - - def parse(self, reader): - "Parse the formula until the end" - formula = self.parseformula(reader) - while not reader.currentline().startswith(self.ending): - stripped = reader.currentline().strip() - if len(stripped) > 0: - Trace.error('Unparsed formula line ' + stripped) - reader.nextline() - reader.nextline() - return formula - - def parseformula(self, reader): - "Parse the formula contents" - simple = FormulaConfig.starts['simple'] - if simple in reader.currentline(): - rest = reader.currentline().split(simple, 1)[1] - if simple in rest: - # formula is $...$ - return self.parsesingleliner(reader, simple, simple) - # formula is multiline $...$ - return self.parsemultiliner(reader, simple, simple) - if FormulaConfig.starts['complex'] in reader.currentline(): - # formula of the form \[...\] - return self.parsemultiliner(reader, FormulaConfig.starts['complex'], - FormulaConfig.endings['complex']) - beginbefore = FormulaConfig.starts['beginbefore'] - beginafter = FormulaConfig.starts['beginafter'] - if beginbefore in reader.currentline(): - if reader.currentline().strip().endswith(beginafter): - current = reader.currentline().strip() - endsplit = current.split(beginbefore)[1].split(beginafter) - startpiece = beginbefore + endsplit[0] + beginafter - endbefore = FormulaConfig.endings['endbefore'] - endafter = FormulaConfig.endings['endafter'] - endpiece = endbefore + endsplit[0] + endafter - return startpiece + self.parsemultiliner(reader, startpiece, endpiece) + endpiece - Trace.error('Missing ' + beginafter + ' in ' + reader.currentline()) - return '' - begincommand = FormulaConfig.starts['command'] - beginbracket = FormulaConfig.starts['bracket'] - if begincommand in reader.currentline() and beginbracket in reader.currentline(): - endbracket = FormulaConfig.endings['bracket'] - return self.parsemultiliner(reader, beginbracket, endbracket) - Trace.error('Formula beginning ' + reader.currentline() + ' is unknown') - return '' - - def parsesingleliner(self, reader, start, ending): - "Parse a formula in one line" - line = reader.currentline().strip() - if not start in line: - Trace.error('Line ' + line + ' does not contain formula start ' + start) - return '' - if not line.endswith(ending): - Trace.error('Formula ' + line + ' does not end with ' + ending) - return '' - index = line.index(start) - rest = line[index + len(start):-len(ending)] - reader.nextline() - return rest - - def parsemultiliner(self, reader, start, ending): - "Parse a formula in multiple lines" - formula = '' - line = reader.currentline() - if not start in line: - Trace.error('Line ' + line.strip() + ' does not contain formula start ' + start) - return '' - index = line.index(start) - line = line[index + len(start):].strip() - while not line.endswith(ending): - formula += line + '\n' - reader.nextline() - line = reader.currentline() - formula += line[:-len(ending)] - reader.nextline() - return formula - -class MacroParser(FormulaParser): - "A parser for a formula macro." - - def parseheader(self, reader): - "See if the formula is inlined" - self.begin = reader.linenumber + 1 - return ['inline'] - - def parse(self, reader): - "Parse the formula until the end" - formula = self.parsemultiliner(reader, self.parent.start, self.ending) - reader.nextline() - return formula - - -class FormulaBit(Container): - "A bit of a formula" - - type = None - size = 1 - original = '' - - def __init__(self): - "The formula bit type can be 'alpha', 'number', 'font'." - self.contents = [] - self.output = ContentsOutput() - - def setfactory(self, factory): - "Set the internal formula factory." - self.factory = factory - return self - - def add(self, bit): - "Add any kind of formula bit already processed" - self.contents.append(bit) - self.original += bit.original - bit.parent = self - - def skiporiginal(self, string, pos): - "Skip a string and add it to the original formula" - self.original += string - if not pos.checkskip(string): - Trace.error('String ' + string + ' not at ' + pos.identifier()) - - def computesize(self): - "Compute the size of the bit as the max of the sizes of all contents." - if len(self.contents) == 0: - return 1 - self.size = max([element.size for element in self.contents]) - return self.size - - def clone(self): - "Return a copy of itself." - return self.factory.parseformula(self.original) - - def __unicode__(self): - "Get a string representation" - return self.__class__.__name__ + ' read in ' + self.original - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class TaggedBit(FormulaBit): - "A tagged string in a formula" - - def constant(self, constant, tag): - "Set the constant and the tag" - self.output = TaggedOutput().settag(tag) - self.add(FormulaConstant(constant)) - return self - - def complete(self, contents, tag, breaklines = False): - "Set the constant and the tag" - self.contents = contents - self.output = TaggedOutput().settag(tag, breaklines) - return self - - def selfcomplete(self, tag): - "Set the self-closing tag, no contents (as in <hr/>)." - self.output = TaggedOutput().settag(tag, empty = True) - return self - -class FormulaConstant(Constant): - "A constant string in a formula" - - def __init__(self, string): - "Set the constant string" - Constant.__init__(self, string) - self.original = string - self.size = 1 - self.type = None - - def computesize(self): - "Compute the size of the constant: always 1." - return self.size - - def clone(self): - "Return a copy of itself." - return FormulaConstant(self.original) - - def __unicode__(self): - "Return a printable representation." - return 'Formula constant: ' + self.string - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class RawText(FormulaBit): - "A bit of text inside a formula" - - def detect(self, pos): - "Detect a bit of raw text" - return pos.current().isalpha() - - def parsebit(self, pos): - "Parse alphabetic text" - alpha = pos.globalpha() - self.add(FormulaConstant(alpha)) - self.type = 'alpha' - -class FormulaSymbol(FormulaBit): - "A symbol inside a formula" - - modified = FormulaConfig.modified - unmodified = FormulaConfig.unmodified['characters'] - - def detect(self, pos): - "Detect a symbol" - if pos.current() in FormulaSymbol.unmodified: - return True - if pos.current() in FormulaSymbol.modified: - return True - return False - - def parsebit(self, pos): - "Parse the symbol" - if pos.current() in FormulaSymbol.unmodified: - self.addsymbol(pos.current(), pos) - return - if pos.current() in FormulaSymbol.modified: - self.addsymbol(FormulaSymbol.modified[pos.current()], pos) - return - Trace.error('Symbol ' + pos.current() + ' not found') - - def addsymbol(self, symbol, pos): - "Add a symbol" - self.skiporiginal(pos.current(), pos) - self.contents.append(FormulaConstant(symbol)) - -class FormulaNumber(FormulaBit): - "A string of digits in a formula" - - def detect(self, pos): - "Detect a digit" - return pos.current().isdigit() - - def parsebit(self, pos): - "Parse a bunch of digits" - digits = pos.glob(lambda: pos.current().isdigit()) - self.add(FormulaConstant(digits)) - self.type = 'number' - -class Comment(FormulaBit): - "A LaTeX comment: % to the end of the line." - - start = FormulaConfig.starts['comment'] - - def detect(self, pos): - "Detect the %." - return pos.current() == self.start - - def parsebit(self, pos): - "Parse to the end of the line." - self.original += pos.globincluding('\n') - -class WhiteSpace(FormulaBit): - "Some white space inside a formula." - - def detect(self, pos): - "Detect the white space." - return pos.current().isspace() - - def parsebit(self, pos): - "Parse all whitespace." - self.original += pos.skipspace() - - def __unicode__(self): - "Return a printable representation." - return 'Whitespace: *' + self.original + '*' - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class Bracket(FormulaBit): - "A {} bracket inside a formula" - - start = FormulaConfig.starts['bracket'] - ending = FormulaConfig.endings['bracket'] - - def __init__(self): - "Create a (possibly literal) new bracket" - FormulaBit.__init__(self) - self.inner = None - - def detect(self, pos): - "Detect the start of a bracket" - return pos.checkfor(self.start) - - def parsebit(self, pos): - "Parse the bracket" - self.parsecomplete(pos, self.innerformula) - return self - - def parsetext(self, pos): - "Parse a text bracket" - self.parsecomplete(pos, self.innertext) - return self - - def parseliteral(self, pos): - "Parse a literal bracket" - self.parsecomplete(pos, self.innerliteral) - return self - - def parsecomplete(self, pos, innerparser): - "Parse the start and end marks" - if not pos.checkfor(self.start): - Trace.error('Bracket should start with ' + self.start + ' at ' + pos.identifier()) - return None - self.skiporiginal(self.start, pos) - pos.pushending(self.ending) - innerparser(pos) - self.original += pos.popending(self.ending) - self.computesize() - - def innerformula(self, pos): - "Parse a whole formula inside the bracket" - while not pos.finished(): - self.add(self.factory.parseany(pos)) - - def innertext(self, pos): - "Parse some text inside the bracket, following textual rules." - specialchars = list(FormulaConfig.symbolfunctions.keys()) - specialchars.append(FormulaConfig.starts['command']) - specialchars.append(FormulaConfig.starts['bracket']) - specialchars.append(Comment.start) - while not pos.finished(): - if pos.current() in specialchars: - self.add(self.factory.parseany(pos)) - if pos.checkskip(' '): - self.original += ' ' - else: - self.add(FormulaConstant(pos.skipcurrent())) - - def innerliteral(self, pos): - "Parse a literal inside the bracket, which does not generate HTML." - self.literal = '' - while not pos.finished() and not pos.current() == self.ending: - if pos.current() == self.start: - self.parseliteral(pos) - else: - self.literal += pos.skipcurrent() - self.original += self.literal - -class SquareBracket(Bracket): - "A [] bracket inside a formula" - - start = FormulaConfig.starts['squarebracket'] - ending = FormulaConfig.endings['squarebracket'] - - def clone(self): - "Return a new square bracket with the same contents." - bracket = SquareBracket() - bracket.contents = self.contents - return bracket - - -class MathsProcessor(object): - "A processor for a maths construction inside the FormulaProcessor." - - def process(self, contents, index): - "Process an element inside a formula." - Trace.error('Unimplemented process() in ' + unicode(self)) - - def __unicode__(self): - "Return a printable description." - return 'Maths processor ' + self.__class__.__name__ - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class FormulaProcessor(object): - "A processor specifically for formulas." - - processors = [] - - def process(self, bit): - "Process the contents of every formula bit, recursively." - self.processcontents(bit) - self.processinsides(bit) - self.traversewhole(bit) - - def processcontents(self, bit): - "Process the contents of a formula bit." - if not isinstance(bit, FormulaBit): - return - bit.process() - for element in bit.contents: - self.processcontents(element) - - def processinsides(self, bit): - "Process the insides (limits, brackets) in a formula bit." - if not isinstance(bit, FormulaBit): - return - for index, element in enumerate(bit.contents): - for processor in self.processors: - processor.process(bit.contents, index) - # continue with recursive processing - self.processinsides(element) - - def traversewhole(self, formula): - "Traverse over the contents to alter variables and space units." - last = None - for bit, contents in self.traverse(formula): - if bit.type == 'alpha': - self.italicize(bit, contents) - elif bit.type == 'font' and last and last.type == 'number': - bit.contents.insert(0, FormulaConstant(u' ')) - last = bit - - def traverse(self, bit): - "Traverse a formula and yield a flattened structure of (bit, list) pairs." - for element in bit.contents: - if hasattr(element, 'type') and element.type: - yield (element, bit.contents) - elif isinstance(element, FormulaBit): - for pair in self.traverse(element): - yield pair - - def italicize(self, bit, contents): - "Italicize the given bit of text." - index = contents.index(bit) - contents[index] = TaggedBit().complete([bit], 'i') - - - - -class Formula(Container): - "A LaTeX formula" - - def __init__(self): - self.parser = FormulaParser() - self.output = TaggedOutput().settag('span class="formula"') - - def process(self): - "Convert the formula to tags" - if self.header[0] == 'inline': - DocumentParameters.displaymode = False - else: - DocumentParameters.displaymode = True - self.output.settag('div class="formula"', True) - if Options.jsmath: - self.jsmath() - elif Options.mathjax: - self.mathjax() - elif Options.googlecharts: - self.googlecharts() - else: - self.classic() - - def jsmath(self): - "Make the contents for jsMath." - if self.header[0] != 'inline': - self.output = TaggedOutput().settag('div class="math"') - else: - self.output = TaggedOutput().settag('span class="math"') - self.contents = [Constant(self.parsed)] - - def mathjax(self): - "Make the contents for MathJax." - self.output.tag = 'span class="MathJax_Preview"' - tag = 'script type="math/tex' - if self.header[0] != 'inline': - tag += ';mode=display' - self.contents = [TaggedText().constant(self.parsed, tag + '"', True)] - - def googlecharts(self): - "Make the contents using Google Charts http://code.google.com/apis/chart/." - url = FormulaConfig.urls['googlecharts'] + quote_plus(self.parsed) - img = '<img class="chart" src="' + url + '" alt="' + self.parsed + '"/>' - self.contents = [Constant(img)] - - def classic(self): - "Make the contents using classic output generation with XHTML and CSS." - whole = FormulaFactory().parseformula(self.parsed) - FormulaProcessor().process(whole) - whole.parent = self - self.contents = [whole] - - def parse(self, pos): - "Parse using a parse position instead of self.parser." - if pos.checkskip('$$'): - self.parsedollarblock(pos) - elif pos.checkskip('$'): - self.parsedollarinline(pos) - elif pos.checkskip('\\('): - self.parseinlineto(pos, '\\)') - elif pos.checkskip('\\['): - self.parseblockto(pos, '\\]') - else: - pos.error('Unparseable formula') - self.process() - return self - - def parsedollarinline(self, pos): - "Parse a $...$ formula." - self.header = ['inline'] - self.parsedollar(pos) - - def parsedollarblock(self, pos): - "Parse a $$...$$ formula." - self.header = ['block'] - self.parsedollar(pos) - if not pos.checkskip('$'): - pos.error('Formula should be $$...$$, but last $ is missing.') - - def parsedollar(self, pos): - "Parse to the next $." - pos.pushending('$') - self.parsed = pos.globexcluding('$') - pos.popending('$') - - def parseinlineto(self, pos, limit): - "Parse a \\(...\\) formula." - self.header = ['inline'] - self.parseupto(pos, limit) - - def parseblockto(self, pos, limit): - "Parse a \\[...\\] formula." - self.header = ['block'] - self.parseupto(pos, limit) - - def parseupto(self, pos, limit): - "Parse a formula that ends with the given command." - pos.pushending(limit) - self.parsed = pos.glob(lambda: True) - pos.popending(limit) - - def __unicode__(self): - "Return a printable representation." - if self.partkey and self.partkey.number: - return 'Formula (' + self.partkey.number + ')' - return 'Unnumbered formula' - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class WholeFormula(FormulaBit): - "Parse a whole formula" - - def detect(self, pos): - "Not outside the formula is enough." - return not pos.finished() - - def parsebit(self, pos): - "Parse with any formula bit" - while not pos.finished(): - self.add(self.factory.parseany(pos)) - -class FormulaFactory(object): - "Construct bits of formula" - - # bit types will be appended later - types = [FormulaSymbol, RawText, FormulaNumber, Bracket, Comment, WhiteSpace] - skippedtypes = [Comment, WhiteSpace] - defining = False - - def __init__(self): - "Initialize the map of instances." - self.instances = dict() - - def detecttype(self, type, pos): - "Detect a bit of a given type." - if pos.finished(): - return False - return self.instance(type).detect(pos) - - def instance(self, type): - "Get an instance of the given type." - if not type in self.instances or not self.instances[type]: - self.instances[type] = self.create(type) - return self.instances[type] - - def create(self, type): - "Create a new formula bit of the given type." - return Cloner.create(type).setfactory(self) - - def clearskipped(self, pos): - "Clear any skipped types." - while not pos.finished(): - if not self.skipany(pos): - return - return - - def skipany(self, pos): - "Skip any skipped types." - for type in self.skippedtypes: - if self.instance(type).detect(pos): - return self.parsetype(type, pos) - return None - - def parseany(self, pos): - "Parse any formula bit at the current location." - for type in self.types + self.skippedtypes: - if self.detecttype(type, pos): - return self.parsetype(type, pos) - Trace.error('Unrecognized formula at ' + pos.identifier()) - return FormulaConstant(pos.skipcurrent()) - - def parsetype(self, type, pos): - "Parse the given type and return it." - bit = self.instance(type) - self.instances[type] = None - returnedbit = bit.parsebit(pos) - if returnedbit: - return returnedbit.setfactory(self) - return bit - - def parseformula(self, formula): - "Parse a string of text that contains a whole formula." - pos = TextPosition(formula) - whole = self.create(WholeFormula) - if whole.detect(pos): - whole.parsebit(pos) - return whole - # no formula found - if not pos.finished(): - Trace.error('Unknown formula at: ' + pos.identifier()) - whole.add(TaggedBit().constant(formula, 'span class="unknown"')) - return whole - - -class Translator(object): - "Reads the configuration file and tries to find a translation." - "Otherwise falls back to the messages in the config file." - - instance = None - - def translate(cls, key): - "Get the translated message for a key." - return cls.instance.getmessage(key) - - translate = classmethod(translate) - - def __init__(self): - self.translation = None - self.first = True - - def findtranslation(self): - "Find the translation for the document language." - self.langcodes = None - if not DocumentParameters.language: - Trace.error('No language in document') - return - if not DocumentParameters.language in TranslationConfig.languages: - Trace.error('Unknown language ' + DocumentParameters.language) - return - if TranslationConfig.languages[DocumentParameters.language] == 'en': - return - langcodes = [TranslationConfig.languages[DocumentParameters.language]] - try: - self.translation = gettext.translation('elyxer', None, langcodes) - except IOError: - Trace.error('No translation for ' + unicode(langcodes)) - - def getmessage(self, key): - "Get the translated message for the given key." - if self.first: - self.findtranslation() - self.first = False - message = self.getuntranslated(key) - if not self.translation: - return message - try: - message = self.translation.ugettext(message) - except IOError: - pass - return message - - def getuntranslated(self, key): - "Get the untranslated message." - if not key in TranslationConfig.constants: - Trace.error('Cannot translate ' + key) - return key - return TranslationConfig.constants[key] - -Translator.instance = Translator() - - - -class NumberCounter(object): - "A counter for numbers (by default)." - "The type can be changed to return letters, roman numbers..." - - name = None - value = None - mode = None - master = None - - letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - symbols = NumberingConfig.sequence['symbols'] - romannumerals = [ - ('M', 1000), ('CM', 900), ('D', 500), ('CD', 400), ('C', 100), - ('XC', 90), ('L', 50), ('XL', 40), ('X', 10), ('IX', 9), ('V', 5), - ('IV', 4), ('I', 1) - ] - - def __init__(self, name): - "Give a name to the counter." - self.name = name - - def setmode(self, mode): - "Set the counter mode. Can be changed at runtime." - self.mode = mode - return self - - def init(self, value): - "Set an initial value." - self.value = value - - def gettext(self): - "Get the next value as a text string." - return unicode(self.value) - - def getletter(self): - "Get the next value as a letter." - return self.getsequence(self.letters) - - def getsymbol(self): - "Get the next value as a symbol." - return self.getsequence(self.symbols) - - def getsequence(self, sequence): - "Get the next value from elyxer.a sequence." - return sequence[(self.value - 1) % len(sequence)] - - def getroman(self): - "Get the next value as a roman number." - result = '' - number = self.value - for numeral, value in self.romannumerals: - if number >= value: - result += numeral * (number / value) - number = number % value - return result - - def getvalue(self): - "Get the current value as configured in the current mode." - if not self.mode or self.mode in ['text', '1']: - return self.gettext() - if self.mode == 'A': - return self.getletter() - if self.mode == 'a': - return self.getletter().lower() - if self.mode == 'I': - return self.getroman() - if self.mode == '*': - return self.getsymbol() - Trace.error('Unknown counter mode ' + self.mode) - return self.gettext() - - def getnext(self): - "Increase the current value and get the next value as configured." - if not self.value: - self.value = 0 - self.value += 1 - return self.getvalue() - - def reset(self): - "Reset the counter." - self.value = 0 - - def __unicode__(self): - "Return a printable representation." - result = 'Counter ' + self.name - if self.mode: - result += ' in mode ' + self.mode - return result - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class DependentCounter(NumberCounter): - "A counter which depends on another one (the master)." - - def setmaster(self, master): - "Set the master counter." - self.master = master - self.last = self.master.getvalue() - return self - - def getnext(self): - "Increase or, if the master counter has changed, restart." - if self.last != self.master.getvalue(): - self.reset() - value = NumberCounter.getnext(self) - self.last = self.master.getvalue() - return value - - def getvalue(self): - "Get the value of the combined counter: master.dependent." - return self.master.getvalue() + '.' + NumberCounter.getvalue(self) - -class NumberGenerator(object): - "A number generator for unique sequences and hierarchical structures. Used in:" - " * ordered part numbers: Chapter 3, Section 5.3." - " * unique part numbers: Footnote 15, Bibliography cite [15]." - " * chaptered part numbers: Figure 3.15, Equation (8.3)." - " * unique roman part numbers: Part I, Book IV." - - chaptered = None - generator = None - - romanlayouts = [x.lower() for x in NumberingConfig.layouts['roman']] - orderedlayouts = [x.lower() for x in NumberingConfig.layouts['ordered']] - - counters = dict() - appendix = None - - def deasterisk(self, type): - "Remove the possible asterisk in a layout type." - return type.replace('*', '') - - def isunique(self, type): - "Find out if the layout type corresponds to a unique part." - return self.isroman(type) - - def isroman(self, type): - "Find out if the layout type should have roman numeration." - return self.deasterisk(type).lower() in self.romanlayouts - - def isinordered(self, type): - "Find out if the layout type corresponds to an (un)ordered part." - return self.deasterisk(type).lower() in self.orderedlayouts - - def isnumbered(self, type): - "Find out if the type for a layout corresponds to a numbered layout." - if '*' in type: - return False - if self.isroman(type): - return True - if not self.isinordered(type): - return False - if self.getlevel(type) > DocumentParameters.maxdepth: - return False - return True - - def isunordered(self, type): - "Find out if the type contains an asterisk, basically." - return '*' in type - - def getlevel(self, type): - "Get the level that corresponds to a layout type." - if self.isunique(type): - return 0 - if not self.isinordered(type): - Trace.error('Unknown layout type ' + type) - return 0 - type = self.deasterisk(type).lower() - level = self.orderedlayouts.index(type) + 1 - return level - DocumentParameters.startinglevel - - def getparttype(self, type): - "Obtain the type for the part: without the asterisk, " - "and switched to Appendix if necessary." - if NumberGenerator.appendix and self.getlevel(type) == 1: - return 'Appendix' - return self.deasterisk(type) - - def generate(self, type): - "Generate a number for a layout type." - "Unique part types such as Part or Book generate roman numbers: Part I." - "Ordered part types return dot-separated tuples: Chapter 5, Subsection 2.3.5." - "Everything else generates unique numbers: Bibliography [1]." - "Each invocation results in a new number." - return self.getcounter(type).getnext() - - def getcounter(self, type): - "Get the counter for the given type." - type = type.lower() - if not type in self.counters: - self.counters[type] = self.create(type) - return self.counters[type] - - def create(self, type): - "Create a counter for the given type." - if self.isnumbered(type) and self.getlevel(type) > 1: - index = self.orderedlayouts.index(type) - above = self.orderedlayouts[index - 1] - master = self.getcounter(above) - return self.createdependent(type, master) - counter = NumberCounter(type) - if self.isroman(type): - counter.setmode('I') - return counter - - def getdependentcounter(self, type, master): - "Get (or create) a counter of the given type that depends on another." - if not type in self.counters or not self.counters[type].master: - self.counters[type] = self.createdependent(type, master) - return self.counters[type] - - def createdependent(self, type, master): - "Create a dependent counter given the master." - return DependentCounter(type).setmaster(master) - - def startappendix(self): - "Start appendices here." - firsttype = self.orderedlayouts[DocumentParameters.startinglevel] - counter = self.getcounter(firsttype) - counter.setmode('A').reset() - NumberGenerator.appendix = True - -class ChapteredGenerator(NumberGenerator): - "Generate chaptered numbers, as in Chapter.Number." - "Used in equations, figures: Equation (5.3), figure 8.15." - - def generate(self, type): - "Generate a number which goes with first-level numbers (chapters). " - "For the article classes a unique number is generated." - if DocumentParameters.startinglevel > 0: - return NumberGenerator.generator.generate(type) - chapter = self.getcounter('Chapter') - return self.getdependentcounter(type, chapter).getnext() - - -NumberGenerator.chaptered = ChapteredGenerator() -NumberGenerator.generator = NumberGenerator() - - - - - - -class ContainerSize(object): - "The size of a container." - - width = None - height = None - maxwidth = None - maxheight = None - scale = None - - def set(self, width = None, height = None): - "Set the proper size with width and height." - self.setvalue('width', width) - self.setvalue('height', height) - return self - - def setmax(self, maxwidth = None, maxheight = None): - "Set max width and/or height." - self.setvalue('maxwidth', maxwidth) - self.setvalue('maxheight', maxheight) - return self - - def readparameters(self, container): - "Read some size parameters off a container." - self.setparameter(container, 'width') - self.setparameter(container, 'height') - self.setparameter(container, 'scale') - self.checkvalidheight(container) - return self - - def setparameter(self, container, name): - "Read a size parameter off a container, and set it if present." - value = container.getparameter(name) - self.setvalue(name, value) - - def setvalue(self, name, value): - "Set the value of a parameter name, only if it's valid." - value = self.processparameter(value) - if value: - setattr(self, name, value) - - def checkvalidheight(self, container): - "Check if the height parameter is valid; otherwise erase it." - heightspecial = container.getparameter('height_special') - if self.height and self.extractnumber(self.height) == '1' and heightspecial == 'totalheight': - self.height = None - - def processparameter(self, value): - "Do the full processing on a parameter." - if not value: - return None - if self.extractnumber(value) == '0': - return None - for ignored in StyleConfig.size['ignoredtexts']: - if ignored in value: - value = value.replace(ignored, '') - return value - - def extractnumber(self, text): - "Extract the first number in the given text." - result = '' - decimal = False - for char in text: - if char.isdigit(): - result += char - elif char == '.' and not decimal: - result += char - decimal = True - else: - return result - return result - - def checkimage(self, width, height): - "Check image dimensions, set them if possible." - if width: - self.maxwidth = unicode(width) + 'px' - if self.scale and not self.width: - self.width = self.scalevalue(width) - if height: - self.maxheight = unicode(height) + 'px' - if self.scale and not self.height: - self.height = self.scalevalue(height) - if self.width and not self.height: - self.height = 'auto' - if self.height and not self.width: - self.width = 'auto' - - def scalevalue(self, value): - "Scale the value according to the image scale and return it as unicode." - scaled = value * int(self.scale) / 100 - return unicode(int(scaled)) + 'px' - - def removepercentwidth(self): - "Remove percent width if present, to set it at the figure level." - if not self.width: - return None - if not '%' in self.width: - return None - width = self.width - self.width = None - if self.height == 'auto': - self.height = None - return width - - def addstyle(self, container): - "Add the proper style attribute to the output tag." - if not isinstance(container.output, TaggedOutput): - Trace.error('No tag to add style, in ' + unicode(container)) - if not self.width and not self.height and not self.maxwidth and not self.maxheight: - # nothing to see here; move along - return - tag = ' style="' - tag += self.styleparameter('width') - tag += self.styleparameter('maxwidth') - tag += self.styleparameter('height') - tag += self.styleparameter('maxheight') - if tag[-1] == ' ': - tag = tag[:-1] - tag += '"' - container.output.tag += tag - - def styleparameter(self, name): - "Get the style for a single parameter." - value = getattr(self, name) - if value: - return name.replace('max', 'max-') + ': ' + value + '; ' - return '' - - - -class QuoteContainer(Container): - "A container for a pretty quote" - - def __init__(self): - self.parser = BoundedParser() - self.output = FixedOutput() - - def process(self): - "Process contents" - self.type = self.header[2] - if not self.type in StyleConfig.quotes: - Trace.error('Quote type ' + self.type + ' not found') - self.html = ['"'] - return - self.html = [StyleConfig.quotes[self.type]] - -class LyXLine(Container): - "A Lyx line" - - def __init__(self): - self.parser = LoneCommand() - self.output = FixedOutput() - - def process(self): - self.html = ['<hr class="line" />'] - -class EmphaticText(TaggedText): - "Text with emphatic mode" - - def process(self): - self.output.tag = 'i' - -class ShapedText(TaggedText): - "Text shaped (italic, slanted)" - - def process(self): - self.type = self.header[1] - if not self.type in TagConfig.shaped: - Trace.error('Unrecognized shape ' + self.header[1]) - self.output.tag = 'span' - return - self.output.tag = TagConfig.shaped[self.type] - -class VersalitasText(TaggedText): - "Text in versalitas" - - def process(self): - self.output.tag = 'span class="versalitas"' - -class ColorText(TaggedText): - "Colored text" - - def process(self): - self.color = self.header[1] - self.output.tag = 'span class="' + self.color + '"' - -class SizeText(TaggedText): - "Sized text" - - def process(self): - self.size = self.header[1] - self.output.tag = 'span class="' + self.size + '"' - -class BoldText(TaggedText): - "Bold text" - - def process(self): - self.output.tag = 'b' - -class TextFamily(TaggedText): - "A bit of text from elyxer.a different family" - - def process(self): - "Parse the type of family" - self.type = self.header[1] - if not self.type in TagConfig.family: - Trace.error('Unrecognized family ' + type) - self.output.tag = 'span' - return - self.output.tag = TagConfig.family[self.type] - -class Hfill(TaggedText): - "Horizontall fill" - - def process(self): - self.output.tag = 'span class="hfill"' - -class BarredText(TaggedText): - "Text with a bar somewhere" - - def process(self): - "Parse the type of bar" - self.type = self.header[1] - if not self.type in TagConfig.barred: - Trace.error('Unknown bar type ' + self.type) - self.output.tag = 'span' - return - self.output.tag = TagConfig.barred[self.type] - -class LangLine(TaggedText): - "A line with language information" - - def process(self): - "Only generate a span with lang info when the language is recognized." - lang = self.header[1] - if not lang in TranslationConfig.languages: - self.output = ContentsOutput() - return - isolang = TranslationConfig.languages[lang] - self.output = TaggedOutput().settag('span lang="' + isolang + '"', False) - -class InsetLength(BlackBox): - "A length measure inside an inset." - - def process(self): - self.length = self.header[1] - -class Space(Container): - "A space of several types" - - def __init__(self): - self.parser = InsetParser() - self.output = FixedOutput() - - def process(self): - self.type = self.header[2] - if self.type not in StyleConfig.hspaces: - Trace.error('Unknown space type ' + self.type) - self.html = [' '] - return - self.html = [StyleConfig.hspaces[self.type]] - length = self.getlength() - if not length: - return - self.output = TaggedOutput().settag('span class="hspace"', False) - ContainerSize().set(length).addstyle(self) - - def getlength(self): - "Get the space length from elyxer.the contents or parameters." - if len(self.contents) == 0 or not isinstance(self.contents[0], InsetLength): - return None - return self.contents[0].length - -class VerticalSpace(Container): - "An inset that contains a vertical space." - - def __init__(self): - self.parser = InsetParser() - self.output = FixedOutput() - - def process(self): - "Set the correct tag" - self.type = self.header[2] - if self.type not in StyleConfig.vspaces: - self.output = TaggedOutput().settag('div class="vspace" style="height: ' + self.type + ';"', True) - return - self.html = [StyleConfig.vspaces[self.type]] - -class Align(Container): - "Bit of aligned text" - - def __init__(self): - self.parser = ExcludingParser() - self.output = TaggedOutput().setbreaklines(True) - - def process(self): - self.output.tag = 'div class="' + self.header[1] + '"' - -class Newline(Container): - "A newline" - - def __init__(self): - self.parser = LoneCommand() - self.output = FixedOutput() - - def process(self): - "Process contents" - self.html = ['<br/>\n'] - -class NewPage(Newline): - "A new page" - - def process(self): - "Process contents" - self.html = ['<p><br/>\n</p>\n'] - -class Separator(Container): - "A separator string which is not extracted by extracttext()." - - def __init__(self, constant): - self.output = FixedOutput() - self.contents = [] - self.html = [constant] - -class StrikeOut(TaggedText): - "Striken out text." - - def process(self): - "Set the output tag to strike." - self.output.tag = 'strike' - -class StartAppendix(BlackBox): - "Mark to start an appendix here." - "From this point on, all chapters become appendices." - - def process(self): - "Activate the special numbering scheme for appendices, using letters." - NumberGenerator.generator.startappendix() - - - - - - -class Link(Container): - "A link to another part of the document" - - anchor = None - url = None - type = None - page = None - target = None - destination = None - title = None - - def __init__(self): - "Initialize the link, add target if configured." - self.contents = [] - self.parser = InsetParser() - self.output = LinkOutput() - if Options.target: - self.target = Options.target - - def complete(self, text, anchor = None, url = None, type = None, title = None): - "Complete the link." - self.contents = [Constant(text)] - if anchor: - self.anchor = anchor - if url: - self.url = url - if type: - self.type = type - if title: - self.title = title - return self - - def computedestination(self): - "Use the destination link to fill in the destination URL." - if not self.destination: - return - self.url = '' - if self.destination.anchor: - self.url = '#' + self.destination.anchor - if self.destination.page: - self.url = self.destination.page + self.url - - def setmutualdestination(self, destination): - "Set another link as destination, and set its destination to this one." - self.destination = destination - destination.destination = self - - def __unicode__(self): - "Return a printable representation." - result = 'Link' - if self.anchor: - result += ' #' + self.anchor - if self.url: - result += ' to ' + self.url - return result - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class URL(Link): - "A clickable URL" - - def process(self): - "Read URL from elyxer.parameters" - target = self.escape(self.getparameter('target')) - self.url = target - type = self.getparameter('type') - if type: - self.url = self.escape(type) + target - name = self.getparameter('name') - if not name: - name = target - self.contents = [Constant(name)] - -class FlexURL(URL): - "A flexible URL" - - def process(self): - "Read URL from elyxer.contents" - self.url = self.extracttext() - -class LinkOutput(ContainerOutput): - "A link pointing to some destination" - "Or an anchor (destination)" - - def gethtml(self, link): - "Get the HTML code for the link" - type = link.__class__.__name__ - if link.type: - type = link.type - tag = 'a class="' + type + '"' - if link.anchor: - tag += ' name="' + link.anchor + '"' - if link.destination: - link.computedestination() - if link.url: - tag += ' href="' + link.url + '"' - if link.target: - tag += ' target="' + link.target + '"' - if link.title: - tag += ' title="' + link.title + '"' - return TaggedOutput().settag(tag).gethtml(link) - - - - - -class Postprocessor(object): - "Postprocess a container keeping some context" - - stages = [] - - def __init__(self): - self.stages = StageDict(Postprocessor.stages, self) - self.current = None - self.last = None - - def postprocess(self, next): - "Postprocess a container and its contents." - self.postrecursive(self.current) - result = self.postcurrent(next) - self.last = self.current - self.current = next - return result - - def postrecursive(self, container): - "Postprocess the container contents recursively" - if not hasattr(container, 'contents'): - return - if len(container.contents) == 0: - return - if hasattr(container, 'postprocess'): - if not container.postprocess: - return - postprocessor = Postprocessor() - contents = [] - for element in container.contents: - post = postprocessor.postprocess(element) - if post: - contents.append(post) - # two rounds to empty the pipeline - for i in range(2): - post = postprocessor.postprocess(None) - if post: - contents.append(post) - container.contents = contents - - def postcurrent(self, next): - "Postprocess the current element taking into account next and last." - stage = self.stages.getstage(self.current) - if not stage: - return self.current - return stage.postprocess(self.last, self.current, next) - -class StageDict(object): - "A dictionary of stages corresponding to classes" - - def __init__(self, classes, postprocessor): - "Instantiate an element from elyxer.each class and store as a dictionary" - instances = self.instantiate(classes, postprocessor) - self.stagedict = dict([(x.processedclass, x) for x in instances]) - - def instantiate(self, classes, postprocessor): - "Instantiate an element from elyxer.each class" - stages = [x.__new__(x) for x in classes] - for element in stages: - element.__init__() - element.postprocessor = postprocessor - return stages - - def getstage(self, element): - "Get the stage for a given element, if the type is in the dict" - if not element.__class__ in self.stagedict: - return None - return self.stagedict[element.__class__] - - - -class Label(Link): - "A label to be referenced" - - names = dict() - lastlayout = None - - def __init__(self): - Link.__init__(self) - self.lastnumbered = None - - def process(self): - "Process a label container." - key = self.getparameter('name') - self.create(' ', key) - self.lastnumbered = Label.lastlayout - - def create(self, text, key, type = 'Label'): - "Create the label for a given key." - self.key = key - self.complete(text, anchor = key, type = type) - Label.names[key] = self - if key in Reference.references: - for reference in Reference.references[key]: - reference.destination = self - return self - - def findpartkey(self): - "Get the part key for the latest numbered container seen." - numbered = self.numbered(self) - if numbered and numbered.partkey: - return numbered.partkey - return '' - - def numbered(self, container): - "Get the numbered container for the label." - if container.partkey: - return container - if not container.parent: - if self.lastnumbered: - return self.lastnumbered - return None - return self.numbered(container.parent) - - def __unicode__(self): - "Return a printable representation." - if not hasattr(self, 'key'): - return 'Unnamed label' - return 'Label ' + self.key - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class Reference(Link): - "A reference to a label." - - references = dict() - key = 'none' - - def process(self): - "Read the reference and set the arrow." - self.key = self.getparameter('reference') - if self.key in Label.names: - self.direction = u'↑' - label = Label.names[self.key] - else: - self.direction = u'↓' - label = Label().complete(' ', self.key, 'preref') - self.destination = label - self.formatcontents() - if not self.key in Reference.references: - Reference.references[self.key] = [] - Reference.references[self.key].append(self) - - def formatcontents(self): - "Format the reference contents." - formatkey = self.getparameter('LatexCommand') - if not formatkey: - formatkey = 'ref' - self.formatted = u'↕' - if formatkey in StyleConfig.referenceformats: - self.formatted = StyleConfig.referenceformats[formatkey] - else: - Trace.error('Unknown reference format ' + formatkey) - self.replace(u'↕', self.direction) - self.replace('#', '1') - self.replace('on-page', Translator.translate('on-page')) - partkey = self.destination.findpartkey() - # only if partkey and partkey.number are not null, send partkey.number - self.replace('@', partkey and partkey.number) - self.replace(u'¶', partkey and partkey.tocentry) - if not '$' in self.formatted or not partkey or not partkey.titlecontents: - # there is a $ left, but it should go away on preprocessing - self.contents = [Constant(self.formatted)] - return - pieces = self.formatted.split('$') - self.contents = [Constant(pieces[0])] - for piece in pieces[1:]: - self.contents += partkey.titlecontents - self.contents.append(Constant(piece)) - - def replace(self, key, value): - "Replace a key in the format template with a value." - if not key in self.formatted: - return - if not value: - value = '' - self.formatted = self.formatted.replace(key, value) - - def __unicode__(self): - "Return a printable representation." - return 'Reference ' + self.key - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class FormulaCommand(FormulaBit): - "A LaTeX command inside a formula" - - types = [] - start = FormulaConfig.starts['command'] - commandmap = None - - def detect(self, pos): - "Find the current command." - return pos.checkfor(FormulaCommand.start) - - def parsebit(self, pos): - "Parse the command." - command = self.extractcommand(pos) - bit = self.parsewithcommand(command, pos) - if bit: - return bit - if command.startswith('\\up') or command.startswith('\\Up'): - upgreek = self.parseupgreek(command, pos) - if upgreek: - return upgreek - if not self.factory.defining: - Trace.error('Unknown command ' + command) - self.output = TaggedOutput().settag('span class="unknown"') - self.add(FormulaConstant(command)) - return None - - def parsewithcommand(self, command, pos): - "Parse the command type once we have the command." - for type in FormulaCommand.types: - if command in type.commandmap: - return self.parsecommandtype(command, type, pos) - return None - - def parsecommandtype(self, command, type, pos): - "Parse a given command type." - bit = self.factory.create(type) - bit.setcommand(command) - returned = bit.parsebit(pos) - if returned: - return returned - return bit - - def extractcommand(self, pos): - "Extract the command from elyxer.the current position." - if not pos.checkskip(FormulaCommand.start): - pos.error('Missing command start ' + FormulaCommand.start) - return - if pos.finished(): - return self.emptycommand(pos) - if pos.current().isalpha(): - # alpha command - command = FormulaCommand.start + pos.globalpha() - # skip mark of short command - pos.checkskip('*') - return command - # symbol command - return FormulaCommand.start + pos.skipcurrent() - - def emptycommand(self, pos): - """Check for an empty command: look for command disguised as ending. - Special case against '{ \\{ \\} }' situation.""" - command = '' - if not pos.isout(): - ending = pos.nextending() - if ending and pos.checkskip(ending): - command = ending - return FormulaCommand.start + command - - def parseupgreek(self, command, pos): - "Parse the Greek \\up command.." - if len(command) < 4: - return None - if command.startswith('\\up'): - upcommand = '\\' + command[3:] - elif pos.checkskip('\\Up'): - upcommand = '\\' + command[3:4].upper() + command[4:] - else: - Trace.error('Impossible upgreek command: ' + command) - return - upgreek = self.parsewithcommand(upcommand, pos) - if upgreek: - upgreek.type = 'font' - return upgreek - -class CommandBit(FormulaCommand): - "A formula bit that includes a command" - - def setcommand(self, command): - "Set the command in the bit" - self.command = command - if self.commandmap: - self.original += command - self.translated = self.commandmap[self.command] - - def parseparameter(self, pos): - "Parse a parameter at the current position" - self.factory.clearskipped(pos) - if pos.finished(): - return None - parameter = self.factory.parseany(pos) - self.add(parameter) - return parameter - - def parsesquare(self, pos): - "Parse a square bracket" - self.factory.clearskipped(pos) - if not self.factory.detecttype(SquareBracket, pos): - return None - bracket = self.factory.parsetype(SquareBracket, pos) - self.add(bracket) - return bracket - - def parseliteral(self, pos): - "Parse a literal bracket." - self.factory.clearskipped(pos) - if not self.factory.detecttype(Bracket, pos): - if not pos.isvalue(): - Trace.error('No literal parameter found at: ' + pos.identifier()) - return None - return pos.globvalue() - bracket = Bracket().setfactory(self.factory) - self.add(bracket.parseliteral(pos)) - return bracket.literal - - def parsesquareliteral(self, pos): - "Parse a square bracket literally." - self.factory.clearskipped(pos) - if not self.factory.detecttype(SquareBracket, pos): - return None - bracket = SquareBracket().setfactory(self.factory) - self.add(bracket.parseliteral(pos)) - return bracket.literal - - def parsetext(self, pos): - "Parse a text parameter." - self.factory.clearskipped(pos) - if not self.factory.detecttype(Bracket, pos): - Trace.error('No text parameter for ' + self.command) - return None - bracket = Bracket().setfactory(self.factory).parsetext(pos) - self.add(bracket) - return bracket - -class EmptyCommand(CommandBit): - "An empty command (without parameters)" - - commandmap = FormulaConfig.commands - - def parsebit(self, pos): - "Parse a command without parameters" - self.contents = [FormulaConstant(self.translated)] - -class SpacedCommand(CommandBit): - "An empty command which should have math spacing in formulas." - - commandmap = FormulaConfig.spacedcommands - - def parsebit(self, pos): - "Place as contents the command translated and spaced." - self.contents = [FormulaConstant(u' ' + self.translated + u' ')] - -class AlphaCommand(EmptyCommand): - "A command without paramters whose result is alphabetical" - - commandmap = FormulaConfig.alphacommands - - def parsebit(self, pos): - "Parse the command and set type to alpha" - EmptyCommand.parsebit(self, pos) - self.type = 'alpha' - -class OneParamFunction(CommandBit): - "A function of one parameter" - - commandmap = FormulaConfig.onefunctions - simplified = False - - def parsebit(self, pos): - "Parse a function with one parameter" - self.output = TaggedOutput().settag(self.translated) - self.parseparameter(pos) - self.simplifyifpossible() - - def simplifyifpossible(self): - "Try to simplify to a single character." - if self.original in self.commandmap: - self.output = FixedOutput() - self.html = [self.commandmap[self.original]] - self.simplified = True - -class SymbolFunction(CommandBit): - "Find a function which is represented by a symbol (like _ or ^)" - - commandmap = FormulaConfig.symbolfunctions - - def detect(self, pos): - "Find the symbol" - return pos.current() in SymbolFunction.commandmap - - def parsebit(self, pos): - "Parse the symbol" - self.setcommand(pos.current()) - pos.skip(self.command) - self.output = TaggedOutput().settag(self.translated) - self.parseparameter(pos) - -class TextFunction(CommandBit): - "A function where parameters are read as text." - - commandmap = FormulaConfig.textfunctions - - def parsebit(self, pos): - "Parse a text parameter" - self.output = TaggedOutput().settag(self.translated) - self.parsetext(pos) - - def process(self): - "Set the type to font" - self.type = 'font' - -class LabelFunction(CommandBit): - "A function that acts as a label" - - commandmap = FormulaConfig.labelfunctions - - def parsebit(self, pos): - "Parse a literal parameter" - self.key = self.parseliteral(pos) - - def process(self): - "Add an anchor with the label contents." - self.type = 'font' - self.label = Label().create(' ', self.key, type = 'eqnumber') - self.contents = [self.label] - # store as a Label so we know it's been seen - Label.names[self.key] = self.label - -class FontFunction(OneParamFunction): - "A function of one parameter that changes the font" - - commandmap = FormulaConfig.fontfunctions - - def process(self): - "Simplify if possible using a single character." - self.type = 'font' - self.simplifyifpossible() - -FormulaFactory.types += [FormulaCommand, SymbolFunction] -FormulaCommand.types = [ - AlphaCommand, EmptyCommand, OneParamFunction, FontFunction, LabelFunction, - TextFunction, SpacedCommand, - ] - - - - - - - - - - - - -class BigSymbol(object): - "A big symbol generator." - - symbols = FormulaConfig.bigsymbols - - def __init__(self, symbol): - "Create the big symbol." - self.symbol = symbol - - def getpieces(self): - "Get an array with all pieces." - if not self.symbol in self.symbols: - return [self.symbol] - if self.smalllimit(): - return [self.symbol] - return self.symbols[self.symbol] - - def smalllimit(self): - "Decide if the limit should be a small, one-line symbol." - if not DocumentParameters.displaymode: - return True - if len(self.symbols[self.symbol]) == 1: - return True - return Options.simplemath - -class BigBracket(BigSymbol): - "A big bracket generator." - - def __init__(self, size, bracket, alignment='l'): - "Set the size and symbol for the bracket." - self.size = size - self.original = bracket - self.alignment = alignment - self.pieces = None - if bracket in FormulaConfig.bigbrackets: - self.pieces = FormulaConfig.bigbrackets[bracket] - - def getpiece(self, index): - "Return the nth piece for the bracket." - function = getattr(self, 'getpiece' + unicode(len(self.pieces))) - return function(index) - - def getpiece1(self, index): - "Return the only piece for a single-piece bracket." - return self.pieces[0] - - def getpiece3(self, index): - "Get the nth piece for a 3-piece bracket: parenthesis or square bracket." - if index == 0: - return self.pieces[0] - if index == self.size - 1: - return self.pieces[-1] - return self.pieces[1] - - def getpiece4(self, index): - "Get the nth piece for a 4-piece bracket: curly bracket." - if index == 0: - return self.pieces[0] - if index == self.size - 1: - return self.pieces[3] - if index == (self.size - 1)/2: - return self.pieces[2] - return self.pieces[1] - - def getcell(self, index): - "Get the bracket piece as an array cell." - piece = self.getpiece(index) - span = 'span class="bracket align-' + self.alignment + '"' - return TaggedBit().constant(piece, span) - - def getcontents(self): - "Get the bracket as an array or as a single bracket." - if self.size == 1 or not self.pieces: - return self.getsinglebracket() - rows = [] - for index in range(self.size): - cell = self.getcell(index) - rows.append(TaggedBit().complete([cell], 'span class="arrayrow"')) - return [TaggedBit().complete(rows, 'span class="array"')] - - def getsinglebracket(self): - "Return the bracket as a single sign." - if self.original == '.': - return [TaggedBit().constant('', 'span class="emptydot"')] - return [TaggedBit().constant(self.original, 'span class="symbol"')] - - - - - - -class FormulaEquation(CommandBit): - "A simple numbered equation." - - piece = 'equation' - - def parsebit(self, pos): - "Parse the array" - self.output = ContentsOutput() - self.add(self.factory.parsetype(WholeFormula, pos)) - -class FormulaCell(FormulaCommand): - "An array cell inside a row" - - def setalignment(self, alignment): - self.alignment = alignment - self.output = TaggedOutput().settag('span class="arraycell align-' + alignment +'"', True) - return self - - def parsebit(self, pos): - self.factory.clearskipped(pos) - if pos.finished(): - return - self.add(self.factory.parsetype(WholeFormula, pos)) - -class FormulaRow(FormulaCommand): - "An array row inside an array" - - cellseparator = FormulaConfig.array['cellseparator'] - - def setalignments(self, alignments): - self.alignments = alignments - self.output = TaggedOutput().settag('span class="arrayrow"', True) - return self - - def parsebit(self, pos): - "Parse a whole row" - index = 0 - pos.pushending(self.cellseparator, optional=True) - while not pos.finished(): - cell = self.createcell(index) - cell.parsebit(pos) - self.add(cell) - index += 1 - pos.checkskip(self.cellseparator) - if len(self.contents) == 0: - self.output = EmptyOutput() - - def createcell(self, index): - "Create the cell that corresponds to the given index." - alignment = self.alignments[index % len(self.alignments)] - return self.factory.create(FormulaCell).setalignment(alignment) - -class MultiRowFormula(CommandBit): - "A formula with multiple rows." - - def parserows(self, pos): - "Parse all rows, finish when no more row ends" - self.rows = [] - first = True - for row in self.iteraterows(pos): - if first: - first = False - else: - # intersparse empty rows - self.addempty() - row.parsebit(pos) - self.addrow(row) - self.size = len(self.rows) - - def iteraterows(self, pos): - "Iterate over all rows, end when no more row ends" - rowseparator = FormulaConfig.array['rowseparator'] - while True: - pos.pushending(rowseparator, True) - row = self.factory.create(FormulaRow) - yield row.setalignments(self.alignments) - if pos.checkfor(rowseparator): - self.original += pos.popending(rowseparator) - else: - return - - def addempty(self): - "Add an empty row." - row = self.factory.create(FormulaRow).setalignments(self.alignments) - for index, originalcell in enumerate(self.rows[-1].contents): - cell = row.createcell(index) - cell.add(FormulaConstant(u' ')) - row.add(cell) - self.addrow(row) - - def addrow(self, row): - "Add a row to the contents and to the list of rows." - self.rows.append(row) - self.add(row) - -class FormulaArray(MultiRowFormula): - "An array within a formula" - - piece = 'array' - - def parsebit(self, pos): - "Parse the array" - self.output = TaggedOutput().settag('span class="array"', False) - self.parsealignments(pos) - self.parserows(pos) - - def parsealignments(self, pos): - "Parse the different alignments" - # vertical - self.valign = 'c' - literal = self.parsesquareliteral(pos) - if literal: - self.valign = literal - # horizontal - literal = self.parseliteral(pos) - self.alignments = [] - for l in literal: - self.alignments.append(l) - -class FormulaMatrix(MultiRowFormula): - "A matrix (array with center alignment)." - - piece = 'matrix' - - def parsebit(self, pos): - "Parse the matrix, set alignments to 'c'." - self.output = TaggedOutput().settag('span class="array"', False) - self.valign = 'c' - self.alignments = ['c'] - self.parserows(pos) - -class FormulaCases(MultiRowFormula): - "A cases statement" - - piece = 'cases' - - def parsebit(self, pos): - "Parse the cases" - self.output = ContentsOutput() - self.alignments = ['l', 'l'] - self.parserows(pos) - for row in self.contents: - for cell in row.contents: - cell.output.settag('span class="case align-l"', True) - cell.contents.append(FormulaConstant(u' ')) - array = TaggedBit().complete(self.contents, 'span class="bracketcases"', True) - brace = BigBracket(len(self.contents), '{', 'l') - self.contents = brace.getcontents() + [array] - -class EquationEnvironment(MultiRowFormula): - "A \\begin{}...\\end equation environment with rows and cells." - - def parsebit(self, pos): - "Parse the whole environment." - self.output = TaggedOutput().settag('span class="environment"', False) - environment = self.piece.replace('*', '') - if environment in FormulaConfig.environments: - self.alignments = FormulaConfig.environments[environment] - else: - Trace.error('Unknown equation environment ' + self.piece) - self.alignments = ['l'] - self.parserows(pos) - -class BeginCommand(CommandBit): - "A \\begin{}...\\end command and what it entails (array, cases, aligned)" - - commandmap = {FormulaConfig.array['begin']:''} - - types = [FormulaEquation, FormulaArray, FormulaCases, FormulaMatrix] - - def parsebit(self, pos): - "Parse the begin command" - command = self.parseliteral(pos) - bit = self.findbit(command) - ending = FormulaConfig.array['end'] + '{' + command + '}' - pos.pushending(ending) - bit.parsebit(pos) - self.add(bit) - self.original += pos.popending(ending) - self.size = bit.size - - def findbit(self, piece): - "Find the command bit corresponding to the \\begin{piece}" - for type in BeginCommand.types: - if piece.replace('*', '') == type.piece: - return self.factory.create(type) - bit = self.factory.create(EquationEnvironment) - bit.piece = piece - return bit - -FormulaCommand.types += [BeginCommand] - - - -class CombiningFunction(OneParamFunction): - - commandmap = FormulaConfig.combiningfunctions - - def parsebit(self, pos): - "Parse a combining function." - self.type = 'alpha' - combining = self.translated - parameter = self.parsesingleparameter(pos) - if not parameter: - Trace.error('Empty parameter for combining function ' + self.command) - elif len(parameter.extracttext()) != 1: - Trace.error('Applying combining function ' + self.command + ' to invalid string "' + parameter.extracttext() + '"') - self.contents.append(Constant(combining)) - - def parsesingleparameter(self, pos): - "Parse a parameter, or a single letter." - self.factory.clearskipped(pos) - if pos.finished(): - Trace.error('Error while parsing single parameter at ' + pos.identifier()) - return None - if self.factory.detecttype(Bracket, pos) \ - or self.factory.detecttype(FormulaCommand, pos): - return self.parseparameter(pos) - letter = FormulaConstant(pos.skipcurrent()) - self.add(letter) - return letter - -class DecoratingFunction(OneParamFunction): - "A function that decorates some bit of text" - - commandmap = FormulaConfig.decoratingfunctions - - def parsebit(self, pos): - "Parse a decorating function" - self.type = 'alpha' - symbol = self.translated - self.symbol = TaggedBit().constant(symbol, 'span class="symbolover"') - self.parameter = self.parseparameter(pos) - self.output = TaggedOutput().settag('span class="withsymbol"') - self.contents.insert(0, self.symbol) - self.parameter.output = TaggedOutput().settag('span class="undersymbol"') - self.simplifyifpossible() - -class LimitCommand(EmptyCommand): - "A command which accepts limits above and below, in display mode." - - commandmap = FormulaConfig.limitcommands - - def parsebit(self, pos): - "Parse a limit command." - pieces = BigSymbol(self.translated).getpieces() - self.output = TaggedOutput().settag('span class="limits"') - for piece in pieces: - self.contents.append(TaggedBit().constant(piece, 'span class="limit"')) - -class LimitPreviousCommand(LimitCommand): - "A command to limit the previous command." - - commandmap = None - - def parsebit(self, pos): - "Do nothing." - self.output = TaggedOutput().settag('span class="limits"') - self.factory.clearskipped(pos) - - def __unicode__(self): - "Return a printable representation." - return 'Limit previous command' - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class LimitsProcessor(MathsProcessor): - "A processor for limits inside an element." - - def process(self, contents, index): - "Process the limits for an element." - if Options.simplemath: - return - if self.checklimits(contents, index): - self.modifylimits(contents, index) - if self.checkscript(contents, index) and self.checkscript(contents, index + 1): - self.modifyscripts(contents, index) - - def checklimits(self, contents, index): - "Check if the current position has a limits command." - if not DocumentParameters.displaymode: - return False - if self.checkcommand(contents, index + 1, LimitPreviousCommand): - self.limitsahead(contents, index) - return False - if not isinstance(contents[index], LimitCommand): - return False - return self.checkscript(contents, index + 1) - - def limitsahead(self, contents, index): - "Limit the current element based on the next." - contents[index + 1].add(contents[index].clone()) - contents[index].output = EmptyOutput() - - def modifylimits(self, contents, index): - "Modify a limits commands so that the limits appear above and below." - limited = contents[index] - subscript = self.getlimit(contents, index + 1) - limited.contents.append(subscript) - if self.checkscript(contents, index + 1): - superscript = self.getlimit(contents, index + 1) - else: - superscript = TaggedBit().constant(u' ', 'sup class="limit"') - limited.contents.insert(0, superscript) - - def getlimit(self, contents, index): - "Get the limit for a limits command." - limit = self.getscript(contents, index) - limit.output.tag = limit.output.tag.replace('script', 'limit') - return limit - - def modifyscripts(self, contents, index): - "Modify the super- and subscript to appear vertically aligned." - subscript = self.getscript(contents, index) - # subscript removed so instead of index + 1 we get index again - superscript = self.getscript(contents, index) - scripts = TaggedBit().complete([superscript, subscript], 'span class="scripts"') - contents.insert(index, scripts) - - def checkscript(self, contents, index): - "Check if the current element is a sub- or superscript." - return self.checkcommand(contents, index, SymbolFunction) - - def checkcommand(self, contents, index, type): - "Check for the given type as the current element." - if len(contents) <= index: - return False - return isinstance(contents[index], type) - - def getscript(self, contents, index): - "Get the sub- or superscript." - bit = contents[index] - bit.output.tag += ' class="script"' - del contents[index] - return bit - -class BracketCommand(OneParamFunction): - "A command which defines a bracket." - - commandmap = FormulaConfig.bracketcommands - - def parsebit(self, pos): - "Parse the bracket." - OneParamFunction.parsebit(self, pos) - - def create(self, direction, character): - "Create the bracket for the given character." - self.original = character - self.command = '\\' + direction - self.contents = [FormulaConstant(character)] - return self - -class BracketProcessor(MathsProcessor): - "A processor for bracket commands." - - def process(self, contents, index): - "Convert the bracket using Unicode pieces, if possible." - if Options.simplemath: - return - if self.checkleft(contents, index): - return self.processleft(contents, index) - - def processleft(self, contents, index): - "Process a left bracket." - rightindex = self.findright(contents, index + 1) - if not rightindex: - return - size = self.findmax(contents, index, rightindex) - self.resize(contents[index], size) - self.resize(contents[rightindex], size) - - def checkleft(self, contents, index): - "Check if the command at the given index is left." - return self.checkdirection(contents[index], '\\left') - - def checkright(self, contents, index): - "Check if the command at the given index is right." - return self.checkdirection(contents[index], '\\right') - - def checkdirection(self, bit, command): - "Check if the given bit is the desired bracket command." - if not isinstance(bit, BracketCommand): - return False - return bit.command == command - - def findright(self, contents, index): - "Find the right bracket starting at the given index, or 0." - depth = 1 - while index < len(contents): - if self.checkleft(contents, index): - depth += 1 - if self.checkright(contents, index): - depth -= 1 - if depth == 0: - return index - index += 1 - return None - - def findmax(self, contents, leftindex, rightindex): - "Find the max size of the contents between the two given indices." - sliced = contents[leftindex:rightindex] - return max([element.size for element in sliced]) - - def resize(self, command, size): - "Resize a bracket command to the given size." - character = command.extracttext() - alignment = command.command.replace('\\', '') - bracket = BigBracket(size, character, alignment) - command.output = ContentsOutput() - command.contents = bracket.getcontents() - -class TodayCommand(EmptyCommand): - "Shows today's date." - - commandmap = None - - def parsebit(self, pos): - "Parse a command without parameters" - self.output = FixedOutput() - self.html = [datetime.date.today().strftime('%b %d, %Y')] - - -FormulaCommand.types += [ - DecoratingFunction, CombiningFunction, LimitCommand, BracketCommand, - ] - -FormulaProcessor.processors += [ - LimitsProcessor(), BracketProcessor(), - ] - - - -class ParameterDefinition(object): - "The definition of a parameter in a hybrid function." - "[] parameters are optional, {} parameters are mandatory." - "Each parameter has a one-character name, like {$1} or {$p}." - "A parameter that ends in ! like {$p!} is a literal." - "Example: [$1]{$p!} reads an optional parameter $1 and a literal mandatory parameter p." - - parambrackets = [('[', ']'), ('{', '}')] - - def __init__(self): - self.name = None - self.literal = False - self.optional = False - self.value = None - self.literalvalue = None - - def parse(self, pos): - "Parse a parameter definition: [$0], {$x}, {$1!}..." - for (opening, closing) in ParameterDefinition.parambrackets: - if pos.checkskip(opening): - if opening == '[': - self.optional = True - if not pos.checkskip('$'): - Trace.error('Wrong parameter name, did you mean $' + pos.current() + '?') - return None - self.name = pos.skipcurrent() - if pos.checkskip('!'): - self.literal = True - if not pos.checkskip(closing): - Trace.error('Wrong parameter closing ' + pos.skipcurrent()) - return None - return self - Trace.error('Wrong character in parameter template: ' + pos.skipcurrent()) - return None - - def read(self, pos, function): - "Read the parameter itself using the definition." - if self.literal: - if self.optional: - self.literalvalue = function.parsesquareliteral(pos) - else: - self.literalvalue = function.parseliteral(pos) - if self.literalvalue: - self.value = FormulaConstant(self.literalvalue) - elif self.optional: - self.value = function.parsesquare(pos) - else: - self.value = function.parseparameter(pos) - - def __unicode__(self): - "Return a printable representation." - result = 'param ' + self.name - if self.value: - result += ': ' + unicode(self.value) - else: - result += ' (empty)' - return result - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -class ParameterFunction(CommandBit): - "A function with a variable number of parameters defined in a template." - "The parameters are defined as a parameter definition." - - def readparams(self, readtemplate, pos): - "Read the params according to the template." - self.params = dict() - for paramdef in self.paramdefs(readtemplate): - paramdef.read(pos, self) - self.params['$' + paramdef.name] = paramdef - - def paramdefs(self, readtemplate): - "Read each param definition in the template" - pos = TextPosition(readtemplate) - while not pos.finished(): - paramdef = ParameterDefinition().parse(pos) - if paramdef: - yield paramdef - - def getparam(self, name): - "Get a parameter as parsed." - if not name in self.params: - return None - return self.params[name] - - def getvalue(self, name): - "Get the value of a parameter." - return self.getparam(name).value - - def getliteralvalue(self, name): - "Get the literal value of a parameter." - param = self.getparam(name) - if not param or not param.literalvalue: - return None - return param.literalvalue - -class HybridFunction(ParameterFunction): - """ - A parameter function where the output is also defined using a template. - The template can use a number of functions; each function has an associated - tag. - Example: [f0{$1},span class="fbox"] defines a function f0 which corresponds - to a span of class fbox, yielding <span class="fbox">$1</span>. - Literal parameters can be used in tags definitions: - [f0{$1},span style="color: $p;"] - yields <span style="color: $p;">$1</span>, where $p is a literal parameter. - Sizes can be specified in hybridsizes, e.g. adding parameter sizes. By - default the resulting size is the max of all arguments. Sizes are used - to generate the right parameters. - A function followed by a single / is output as a self-closing XHTML tag: - [f0/,hr] - will generate <hr/>. - """ - - commandmap = FormulaConfig.hybridfunctions - - def parsebit(self, pos): - "Parse a function with [] and {} parameters" - readtemplate = self.translated[0] - writetemplate = self.translated[1] - self.readparams(readtemplate, pos) - self.contents = self.writeparams(writetemplate) - self.computehybridsize() - - def writeparams(self, writetemplate): - "Write all params according to the template" - return self.writepos(TextPosition(writetemplate)) - - def writepos(self, pos): - "Write all params as read in the parse position." - result = [] - while not pos.finished(): - if pos.checkskip('$'): - param = self.writeparam(pos) - if param: - result.append(param) - elif pos.checkskip('f'): - function = self.writefunction(pos) - if function: - function.type = None - result.append(function) - elif pos.checkskip('('): - result.append(self.writebracket('left', '(')) - elif pos.checkskip(')'): - result.append(self.writebracket('right', ')')) - else: - result.append(FormulaConstant(pos.skipcurrent())) - return result - - def writeparam(self, pos): - "Write a single param of the form $0, $x..." - name = '$' + pos.skipcurrent() - if not name in self.params: - Trace.error('Unknown parameter ' + name) - return None - if not self.params[name]: - return None - if pos.checkskip('.'): - self.params[name].value.type = pos.globalpha() - return self.params[name].value - - def writefunction(self, pos): - "Write a single function f0,...,fn." - tag = self.readtag(pos) - if not tag: - return None - if pos.checkskip('/'): - # self-closing XHTML tag, such as <hr/> - return TaggedBit().selfcomplete(tag) - if not pos.checkskip('{'): - Trace.error('Function should be defined in {}') - return None - pos.pushending('}') - contents = self.writepos(pos) - pos.popending() - if len(contents) == 0: - return None - return TaggedBit().complete(contents, tag) - - def readtag(self, pos): - "Get the tag corresponding to the given index. Does parameter substitution." - if not pos.current().isdigit(): - Trace.error('Function should be f0,...,f9: f' + pos.current()) - return None - index = int(pos.skipcurrent()) - if 2 + index > len(self.translated): - Trace.error('Function f' + unicode(index) + ' is not defined') - return None - tag = self.translated[2 + index] - if not '$' in tag: - return tag - for variable in self.params: - if variable in tag: - param = self.params[variable] - if not param.literal: - Trace.error('Parameters in tag ' + tag + ' should be literal: {' + variable + '!}') - continue - if param.literalvalue: - value = param.literalvalue - else: - value = '' - tag = tag.replace(variable, value) - return tag - - def writebracket(self, direction, character): - "Return a new bracket looking at the given direction." - return self.factory.create(BracketCommand).create(direction, character) - - def computehybridsize(self): - "Compute the size of the hybrid function." - if not self.command in HybridSize.configsizes: - self.computesize() - return - self.size = HybridSize().getsize(self) - # set the size in all elements at first level - for element in self.contents: - element.size = self.size - -class HybridSize(object): - "The size associated with a hybrid function." - - configsizes = FormulaConfig.hybridsizes - - def getsize(self, function): - "Read the size for a function and parse it." - sizestring = self.configsizes[function.command] - for name in function.params: - if name in sizestring: - size = function.params[name].value.computesize() - sizestring = sizestring.replace(name, unicode(size)) - if '$' in sizestring: - Trace.error('Unconverted variable in hybrid size: ' + sizestring) - return 1 - return eval(sizestring) - - -FormulaCommand.types += [HybridFunction] - - - - - - - - - -class HeaderParser(Parser): - "Parses the LyX header" - - def parse(self, reader): - "Parse header parameters into a dictionary, return the preamble." - contents = [] - self.parseending(reader, lambda: self.parseline(reader, contents)) - # skip last line - reader.nextline() - return contents - - def parseline(self, reader, contents): - "Parse a single line as a parameter or as a start" - line = reader.currentline() - if line.startswith(HeaderConfig.parameters['branch']): - self.parsebranch(reader) - return - elif line.startswith(HeaderConfig.parameters['lstset']): - LstParser().parselstset(reader) - return - elif line.startswith(HeaderConfig.parameters['beginpreamble']): - contents.append(self.factory.createcontainer(reader)) - return - # no match - self.parseparameter(reader) - - def parsebranch(self, reader): - "Parse all branch definitions." - branch = reader.currentline().split()[1] - reader.nextline() - subparser = HeaderParser().complete(HeaderConfig.parameters['endbranch']) - subparser.parse(reader) - options = BranchOptions(branch) - for key in subparser.parameters: - options.set(key, subparser.parameters[key]) - Options.branches[branch] = options - - def complete(self, ending): - "Complete the parser with the given ending." - self.ending = ending - return self - -class PreambleParser(Parser): - "A parser for the LyX preamble." - - preamble = [] - - def parse(self, reader): - "Parse the full preamble with all statements." - self.ending = HeaderConfig.parameters['endpreamble'] - self.parseending(reader, lambda: self.parsepreambleline(reader)) - return [] - - def parsepreambleline(self, reader): - "Parse a single preamble line." - PreambleParser.preamble.append(reader.currentline()) - reader.nextline() - -class LstParser(object): - "Parse global and local lstparams." - - globalparams = dict() - - def parselstset(self, reader): - "Parse a declaration of lstparams in lstset." - paramtext = self.extractlstset(reader) - if not '{' in paramtext: - Trace.error('Missing opening bracket in lstset: ' + paramtext) - return - lefttext = paramtext.split('{')[1] - croppedtext = lefttext[:-1] - LstParser.globalparams = self.parselstparams(croppedtext) - - def extractlstset(self, reader): - "Extract the global lstset parameters." - paramtext = '' - while not reader.finished(): - paramtext += reader.currentline() - reader.nextline() - if paramtext.endswith('}'): - return paramtext - Trace.error('Could not find end of \\lstset settings; aborting') - - def parsecontainer(self, container): - "Parse some lstparams from elyxer.a container." - container.lstparams = LstParser.globalparams.copy() - paramlist = container.getparameterlist('lstparams') - container.lstparams.update(self.parselstparams(paramlist)) - - def parselstparams(self, paramlist): - "Process a number of lstparams from elyxer.a list." - paramdict = dict() - for param in paramlist: - if not '=' in param: - if len(param.strip()) > 0: - Trace.error('Invalid listing parameter ' + param) - else: - key, value = param.split('=', 1) - paramdict[key] = value - return paramdict - - - - -class MacroDefinition(CommandBit): - "A function that defines a new command (a macro)." - - macros = dict() - - def parsebit(self, pos): - "Parse the function that defines the macro." - self.output = EmptyOutput() - self.parameternumber = 0 - self.defaults = [] - self.factory.defining = True - self.parseparameters(pos) - self.factory.defining = False - Trace.debug('New command ' + self.newcommand + ' (' + \ - unicode(self.parameternumber) + ' parameters)') - self.macros[self.newcommand] = self - - def parseparameters(self, pos): - "Parse all optional parameters (number of parameters, default values)" - "and the mandatory definition." - self.newcommand = self.parsenewcommand(pos) - # parse number of parameters - literal = self.parsesquareliteral(pos) - if literal: - self.parameternumber = int(literal) - # parse all default values - bracket = self.parsesquare(pos) - while bracket: - self.defaults.append(bracket) - bracket = self.parsesquare(pos) - # parse mandatory definition - self.definition = self.parseparameter(pos) - - def parsenewcommand(self, pos): - "Parse the name of the new command." - self.factory.clearskipped(pos) - if self.factory.detecttype(Bracket, pos): - return self.parseliteral(pos) - if self.factory.detecttype(FormulaCommand, pos): - return self.factory.create(FormulaCommand).extractcommand(pos) - Trace.error('Unknown formula bit in defining function at ' + pos.identifier()) - return 'unknown' - - def instantiate(self): - "Return an instance of the macro." - return self.definition.clone() - -class MacroParameter(FormulaBit): - "A parameter from elyxer.a macro." - - def detect(self, pos): - "Find a macro parameter: #n." - return pos.checkfor('#') - - def parsebit(self, pos): - "Parse the parameter: #n." - if not pos.checkskip('#'): - Trace.error('Missing parameter start #.') - return - self.number = int(pos.skipcurrent()) - self.original = '#' + unicode(self.number) - self.contents = [TaggedBit().constant('#' + unicode(self.number), 'span class="unknown"')] - -class MacroFunction(CommandBit): - "A function that was defined using a macro." - - commandmap = MacroDefinition.macros - - def parsebit(self, pos): - "Parse a number of input parameters." - self.output = FilteredOutput() - self.values = [] - macro = self.translated - self.parseparameters(pos, macro) - self.completemacro(macro) - - def parseparameters(self, pos, macro): - "Parse as many parameters as are needed." - self.parseoptional(pos, list(macro.defaults)) - self.parsemandatory(pos, macro.parameternumber - len(macro.defaults)) - if len(self.values) < macro.parameternumber: - Trace.error('Missing parameters in macro ' + unicode(self)) - - def parseoptional(self, pos, defaults): - "Parse optional parameters." - optional = [] - while self.factory.detecttype(SquareBracket, pos): - optional.append(self.parsesquare(pos)) - if len(optional) > len(defaults): - break - for value in optional: - default = defaults.pop() - if len(value.contents) > 0: - self.values.append(value) - else: - self.values.append(default) - self.values += defaults - - def parsemandatory(self, pos, number): - "Parse a number of mandatory parameters." - for index in range(number): - parameter = self.parsemacroparameter(pos, number - index) - if not parameter: - return - self.values.append(parameter) - - def parsemacroparameter(self, pos, remaining): - "Parse a macro parameter. Could be a bracket or a single letter." - "If there are just two values remaining and there is a running number," - "parse as two separater numbers." - self.factory.clearskipped(pos) - if pos.finished(): - return None - if self.factory.detecttype(FormulaNumber, pos): - return self.parsenumbers(pos, remaining) - return self.parseparameter(pos) - - def parsenumbers(self, pos, remaining): - "Parse the remaining parameters as a running number." - "For example, 12 would be {1}{2}." - number = self.factory.parsetype(FormulaNumber, pos) - if not len(number.original) == remaining: - return number - for digit in number.original: - value = self.factory.create(FormulaNumber) - value.add(FormulaConstant(digit)) - value.type = number - self.values.append(value) - return None - - def completemacro(self, macro): - "Complete the macro with the parameters read." - self.contents = [macro.instantiate()] - replaced = [False] * len(self.values) - for parameter in self.searchall(MacroParameter): - index = parameter.number - 1 - if index >= len(self.values): - Trace.error('Macro parameter index out of bounds: ' + unicode(index)) - return - replaced[index] = True - parameter.contents = [self.values[index].clone()] - for index in range(len(self.values)): - if not replaced[index]: - self.addfilter(index, self.values[index]) - - def addfilter(self, index, value): - "Add a filter for the given parameter number and parameter value." - original = '#' + unicode(index + 1) - value = ''.join(self.values[0].gethtml()) - self.output.addfilter(original, value) - -class FormulaMacro(Formula): - "A math macro defined in an inset." - - def __init__(self): - self.parser = MacroParser() - self.output = EmptyOutput() - - def __unicode__(self): - "Return a printable representation." - return 'Math macro' - - if sys.version_info >= (3, 0): - __str__ = __unicode__ - - -FormulaFactory.types += [ MacroParameter ] - -FormulaCommand.types += [ - MacroFunction, - ] - - - -def math2html(formula): - "Convert some TeX math to HTML." - factory = FormulaFactory() - whole = factory.parseformula(formula) - FormulaProcessor().process(whole) - whole.process() - return ''.join(whole.gethtml()) - -def main(): - "Main function, called if invoked from elyxer.the command line" - args = sys.argv - Options().parseoptions(args) - if len(args) != 1: - Trace.error('Usage: math2html.py escaped_string') - exit() - result = math2html(args[0]) - Trace.message(result) - -if __name__ == '__main__': - main() - diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/tex2mathml_extern.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/tex2mathml_extern.py deleted file mode 100644 index 8545890..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/tex2mathml_extern.py +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# :Id: $Id: tex2mathml_extern.py 8376 2019-08-27 19:49:29Z milde $ -# :Copyright: © 2015 Günter Milde. -# :License: Released under the terms of the `2-Clause BSD license`_, in short: -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause - -# Wrappers for TeX->MathML conversion by external tools -# ===================================================== - -from __future__ import print_function -import subprocess - -document_template = r"""\documentclass{article} -\usepackage{amsmath} -\begin{document} -%s -\end{document} -""" - -def latexml(math_code, reporter=None): - """Convert LaTeX math code to MathML with LaTeXML_ - - .. _LaTeXML: http://dlmf.nist.gov/LaTeXML/ - """ - p = subprocess.Popen(['latexml', - '-', # read from stdin - # '--preload=amsmath', - '--inputencoding=utf8', - ], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - close_fds=True) - p.stdin.write((document_template % math_code).encode('utf8')) - p.stdin.close() - latexml_code = p.stdout.read() - latexml_err = p.stderr.read().decode('utf8') - if reporter and (latexml_err.find('Error') >= 0 or not latexml_code): - reporter.error(latexml_err) - - post_p = subprocess.Popen(['latexmlpost', - '-', - '--nonumbersections', - '--format=xhtml', - # '--linelength=78', # experimental - '--' - ], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - close_fds=True) - post_p.stdin.write(latexml_code) - post_p.stdin.close() - result = post_p.stdout.read().decode('utf8') - post_p_err = post_p.stderr.read().decode('utf8') - if reporter and (post_p_err.find('Error') >= 0 or not result): - reporter.error(post_p_err) - - # extract MathML code: - start, end = result.find('<math'), result.find('</math>')+7 - result = result[start:end] - if 'class="ltx_ERROR' in result: - raise SyntaxError(result) - return result - -def ttm(math_code, reporter=None): - """Convert LaTeX math code to MathML with TtM_ - - .. _TtM: http://hutchinson.belmont.ma.us/tth/mml/ - """ - p = subprocess.Popen(['ttm', - # '-i', # italic font for equations. Default roman. - '-u', # unicode character encoding. (Default iso-8859-1). - '-r', # output raw MathML (no preamble or postlude) - ], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - close_fds=True) - p.stdin.write((document_template % math_code).encode('utf8')) - p.stdin.close() - result = p.stdout.read() - err = p.stderr.read().decode('utf8') - if err.find('**** Unknown') >= 0: - msg = '\n'.join([line for line in err.splitlines() - if line.startswith('****')]) - raise SyntaxError('\nMessage from external converter TtM:\n'+ msg) - if reporter and err.find('**** Error') >= 0 or not result: - reporter.error(err) - start, end = result.find('<math'), result.find('</math>')+7 - result = result[start:end] - return result - -def blahtexml(math_code, inline=True, reporter=None): - """Convert LaTeX math code to MathML with blahtexml_ - - .. _blahtexml: http://gva.noekeon.org/blahtexml/ - """ - options = ['--mathml', - '--indented', - '--spacing', 'moderate', - '--mathml-encoding', 'raw', - '--other-encoding', 'raw', - '--doctype-xhtml+mathml', - '--annotate-TeX', - ] - if inline: - mathmode_arg = '' - else: - mathmode_arg = 'mode="display"' - options.append('--displaymath') - - p = subprocess.Popen(['blahtexml']+options, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - close_fds=True) - p.stdin.write(math_code.encode('utf8')) - p.stdin.close() - result = p.stdout.read().decode('utf8') - err = p.stderr.read().decode('utf8') - - if result.find('<error>') >= 0: - raise SyntaxError('\nMessage from external converter blahtexml:\n' - +result[result.find('<message>')+9:result.find('</message>')]) - if reporter and (err.find('**** Error') >= 0 or not result): - reporter.error(err) - start, end = result.find('<markup>')+9, result.find('</markup>') - result = ('<math xmlns="http://www.w3.org/1998/Math/MathML"%s>\n' - '%s</math>\n') % (mathmode_arg, result[start:end]) - return result - -# self-test - -if __name__ == "__main__": - example = (u'\\frac{\\partial \\sin^2(\\alpha)}{\\partial \\vec r}' - u'\\varpi \\, \\text{Grüße}') - # print(latexml(example).encode('utf8')) - # print(ttm(example)) - print(blahtexml(example).encode('utf8')) diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/tex2unichar.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/tex2unichar.py deleted file mode 100644 index 434c0e8..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/tex2unichar.py +++ /dev/null @@ -1,662 +0,0 @@ -# -*- coding: utf-8 -*- - -# LaTeX math to Unicode symbols translation dictionaries. -# Generated with ``write_tex2unichar.py`` from the data in -# http://milde.users.sourceforge.net/LUCR/Math/ - -# Includes commands from: wasysym, stmaryrd, mathdots, mathabx, esint, bbold, amsxtra, amsmath, amssymb, standard LaTeX - -mathaccent = { - 'acute': u'\u0301', # x́ COMBINING ACUTE ACCENT - 'bar': u'\u0304', # x̄ COMBINING MACRON - 'breve': u'\u0306', # x̆ COMBINING BREVE - 'check': u'\u030c', # x̌ COMBINING CARON - 'ddddot': u'\u20dc', # x⃜ COMBINING FOUR DOTS ABOVE - 'dddot': u'\u20db', # x⃛ COMBINING THREE DOTS ABOVE - 'ddot': u'\u0308', # ẍ COMBINING DIAERESIS - 'dot': u'\u0307', # ẋ COMBINING DOT ABOVE - 'grave': u'\u0300', # x̀ COMBINING GRAVE ACCENT - 'hat': u'\u0302', # x̂ COMBINING CIRCUMFLEX ACCENT - 'mathring': u'\u030a', # x̊ COMBINING RING ABOVE - 'not': u'\u0338', # x̸ COMBINING LONG SOLIDUS OVERLAY - 'overleftarrow': u'\u20d6', # x⃖ COMBINING LEFT ARROW ABOVE - 'overleftrightarrow': u'\u20e1', # x⃡ COMBINING LEFT RIGHT ARROW ABOVE - 'overline': u'\u0305', # x̅ COMBINING OVERLINE - 'overrightarrow': u'\u20d7', # x⃗ COMBINING RIGHT ARROW ABOVE - 'tilde': u'\u0303', # x̃ COMBINING TILDE - 'underbar': u'\u0331', # x̱ COMBINING MACRON BELOW - 'underleftarrow': u'\u20ee', # x⃮ COMBINING LEFT ARROW BELOW - 'underline': u'\u0332', # x̲ COMBINING LOW LINE - 'underrightarrow': u'\u20ef', # x⃯ COMBINING RIGHT ARROW BELOW - 'vec': u'\u20d7', # x⃗ COMBINING RIGHT ARROW ABOVE - 'widehat': u'\u0302', # x̂ COMBINING CIRCUMFLEX ACCENT - 'widetilde': u'\u0303', # x̃ COMBINING TILDE - } -mathalpha = { - 'Bbbk': u'\U0001d55c', # 𝕜 MATHEMATICAL DOUBLE-STRUCK SMALL K - 'Delta': u'\u0394', # Δ GREEK CAPITAL LETTER DELTA - 'Gamma': u'\u0393', # Γ GREEK CAPITAL LETTER GAMMA - 'Im': u'\u2111', # ℑ BLACK-LETTER CAPITAL I - 'Lambda': u'\u039b', # Λ GREEK CAPITAL LETTER LAMDA - 'Omega': u'\u03a9', # Ω GREEK CAPITAL LETTER OMEGA - 'Phi': u'\u03a6', # Φ GREEK CAPITAL LETTER PHI - 'Pi': u'\u03a0', # Π GREEK CAPITAL LETTER PI - 'Psi': u'\u03a8', # Ψ GREEK CAPITAL LETTER PSI - 'Re': u'\u211c', # ℜ BLACK-LETTER CAPITAL R - 'Sigma': u'\u03a3', # Σ GREEK CAPITAL LETTER SIGMA - 'Theta': u'\u0398', # Θ GREEK CAPITAL LETTER THETA - 'Upsilon': u'\u03a5', # Υ GREEK CAPITAL LETTER UPSILON - 'Xi': u'\u039e', # Ξ GREEK CAPITAL LETTER XI - 'aleph': u'\u2135', # ℵ ALEF SYMBOL - 'alpha': u'\u03b1', # α GREEK SMALL LETTER ALPHA - 'beta': u'\u03b2', # β GREEK SMALL LETTER BETA - 'beth': u'\u2136', # ℶ BET SYMBOL - 'chi': u'\u03c7', # χ GREEK SMALL LETTER CHI - 'daleth': u'\u2138', # ℸ DALET SYMBOL - 'delta': u'\u03b4', # δ GREEK SMALL LETTER DELTA - 'digamma': u'\u03dc', # Ϝ GREEK LETTER DIGAMMA - 'ell': u'\u2113', # ℓ SCRIPT SMALL L - 'epsilon': u'\u03f5', # ϵ GREEK LUNATE EPSILON SYMBOL - 'eta': u'\u03b7', # η GREEK SMALL LETTER ETA - 'eth': u'\xf0', # ð LATIN SMALL LETTER ETH - 'gamma': u'\u03b3', # γ GREEK SMALL LETTER GAMMA - 'gimel': u'\u2137', # ℷ GIMEL SYMBOL - 'hbar': u'\u210f', # ℏ PLANCK CONSTANT OVER TWO PI - 'hslash': u'\u210f', # ℏ PLANCK CONSTANT OVER TWO PI - 'imath': u'\u0131', # ı LATIN SMALL LETTER DOTLESS I - 'iota': u'\u03b9', # ι GREEK SMALL LETTER IOTA - 'jmath': u'\u0237', # ȷ LATIN SMALL LETTER DOTLESS J - 'kappa': u'\u03ba', # κ GREEK SMALL LETTER KAPPA - 'lambda': u'\u03bb', # λ GREEK SMALL LETTER LAMDA - 'mu': u'\u03bc', # μ GREEK SMALL LETTER MU - 'nu': u'\u03bd', # ν GREEK SMALL LETTER NU - 'omega': u'\u03c9', # ω GREEK SMALL LETTER OMEGA - 'phi': u'\u03d5', # ϕ GREEK PHI SYMBOL - 'pi': u'\u03c0', # π GREEK SMALL LETTER PI - 'psi': u'\u03c8', # ψ GREEK SMALL LETTER PSI - 'rho': u'\u03c1', # ρ GREEK SMALL LETTER RHO - 'sigma': u'\u03c3', # σ GREEK SMALL LETTER SIGMA - 'tau': u'\u03c4', # τ GREEK SMALL LETTER TAU - 'theta': u'\u03b8', # θ GREEK SMALL LETTER THETA - 'upsilon': u'\u03c5', # υ GREEK SMALL LETTER UPSILON - 'varDelta': u'\U0001d6e5', # 𝛥 MATHEMATICAL ITALIC CAPITAL DELTA - 'varGamma': u'\U0001d6e4', # 𝛤 MATHEMATICAL ITALIC CAPITAL GAMMA - 'varLambda': u'\U0001d6ec', # 𝛬 MATHEMATICAL ITALIC CAPITAL LAMDA - 'varOmega': u'\U0001d6fa', # 𝛺 MATHEMATICAL ITALIC CAPITAL OMEGA - 'varPhi': u'\U0001d6f7', # 𝛷 MATHEMATICAL ITALIC CAPITAL PHI - 'varPi': u'\U0001d6f1', # 𝛱 MATHEMATICAL ITALIC CAPITAL PI - 'varPsi': u'\U0001d6f9', # 𝛹 MATHEMATICAL ITALIC CAPITAL PSI - 'varSigma': u'\U0001d6f4', # 𝛴 MATHEMATICAL ITALIC CAPITAL SIGMA - 'varTheta': u'\U0001d6e9', # 𝛩 MATHEMATICAL ITALIC CAPITAL THETA - 'varUpsilon': u'\U0001d6f6', # 𝛶 MATHEMATICAL ITALIC CAPITAL UPSILON - 'varXi': u'\U0001d6ef', # 𝛯 MATHEMATICAL ITALIC CAPITAL XI - 'varepsilon': u'\u03b5', # ε GREEK SMALL LETTER EPSILON - 'varkappa': u'\U0001d718', # 𝜘 MATHEMATICAL ITALIC KAPPA SYMBOL - 'varphi': u'\u03c6', # φ GREEK SMALL LETTER PHI - 'varpi': u'\u03d6', # ϖ GREEK PI SYMBOL - 'varrho': u'\u03f1', # ϱ GREEK RHO SYMBOL - 'varsigma': u'\u03c2', # ς GREEK SMALL LETTER FINAL SIGMA - 'vartheta': u'\u03d1', # ϑ GREEK THETA SYMBOL - 'wp': u'\u2118', # ℘ SCRIPT CAPITAL P - 'xi': u'\u03be', # ξ GREEK SMALL LETTER XI - 'zeta': u'\u03b6', # ζ GREEK SMALL LETTER ZETA - } -mathbin = { - 'Cap': u'\u22d2', # ⋒ DOUBLE INTERSECTION - 'Circle': u'\u25cb', # ○ WHITE CIRCLE - 'Cup': u'\u22d3', # ⋓ DOUBLE UNION - 'LHD': u'\u25c0', # ◀ BLACK LEFT-POINTING TRIANGLE - 'RHD': u'\u25b6', # ▶ BLACK RIGHT-POINTING TRIANGLE - 'amalg': u'\u2a3f', # ⨿ AMALGAMATION OR COPRODUCT - 'ast': u'\u2217', # ∗ ASTERISK OPERATOR - 'barwedge': u'\u22bc', # ⊼ NAND - 'bigtriangledown': u'\u25bd', # ▽ WHITE DOWN-POINTING TRIANGLE - 'bigtriangleup': u'\u25b3', # △ WHITE UP-POINTING TRIANGLE - 'bindnasrepma': u'\u214b', # ⅋ TURNED AMPERSAND - 'blacklozenge': u'\u29eb', # ⧫ BLACK LOZENGE - 'blacktriangledown': u'\u25be', # ▾ BLACK DOWN-POINTING SMALL TRIANGLE - 'blacktriangleleft': u'\u25c2', # ◂ BLACK LEFT-POINTING SMALL TRIANGLE - 'blacktriangleright': u'\u25b8', # ▸ BLACK RIGHT-POINTING SMALL TRIANGLE - 'blacktriangleup': u'\u25b4', # ▴ BLACK UP-POINTING SMALL TRIANGLE - 'boxast': u'\u29c6', # ⧆ SQUARED ASTERISK - 'boxbar': u'\u25eb', # ◫ WHITE SQUARE WITH VERTICAL BISECTING LINE - 'boxbox': u'\u29c8', # ⧈ SQUARED SQUARE - 'boxbslash': u'\u29c5', # ⧅ SQUARED FALLING DIAGONAL SLASH - 'boxcircle': u'\u29c7', # ⧇ SQUARED SMALL CIRCLE - 'boxdot': u'\u22a1', # ⊡ SQUARED DOT OPERATOR - 'boxminus': u'\u229f', # ⊟ SQUARED MINUS - 'boxplus': u'\u229e', # ⊞ SQUARED PLUS - 'boxslash': u'\u29c4', # ⧄ SQUARED RISING DIAGONAL SLASH - 'boxtimes': u'\u22a0', # ⊠ SQUARED TIMES - 'bullet': u'\u2219', # ∙ BULLET OPERATOR - 'cap': u'\u2229', # ∩ INTERSECTION - 'cdot': u'\u22c5', # ⋅ DOT OPERATOR - 'circ': u'\u2218', # ∘ RING OPERATOR - 'circledast': u'\u229b', # ⊛ CIRCLED ASTERISK OPERATOR - 'circledcirc': u'\u229a', # ⊚ CIRCLED RING OPERATOR - 'circleddash': u'\u229d', # ⊝ CIRCLED DASH - 'cup': u'\u222a', # ∪ UNION - 'curlyvee': u'\u22ce', # ⋎ CURLY LOGICAL OR - 'curlywedge': u'\u22cf', # ⋏ CURLY LOGICAL AND - 'dagger': u'\u2020', # † DAGGER - 'ddagger': u'\u2021', # ‡ DOUBLE DAGGER - 'diamond': u'\u22c4', # ⋄ DIAMOND OPERATOR - 'div': u'\xf7', # ÷ DIVISION SIGN - 'divideontimes': u'\u22c7', # ⋇ DIVISION TIMES - 'dotplus': u'\u2214', # ∔ DOT PLUS - 'doublebarwedge': u'\u2a5e', # ⩞ LOGICAL AND WITH DOUBLE OVERBAR - 'intercal': u'\u22ba', # ⊺ INTERCALATE - 'interleave': u'\u2af4', # ⫴ TRIPLE VERTICAL BAR BINARY RELATION - 'land': u'\u2227', # ∧ LOGICAL AND - 'leftthreetimes': u'\u22cb', # ⋋ LEFT SEMIDIRECT PRODUCT - 'lhd': u'\u25c1', # ◁ WHITE LEFT-POINTING TRIANGLE - 'lor': u'\u2228', # ∨ LOGICAL OR - 'ltimes': u'\u22c9', # ⋉ LEFT NORMAL FACTOR SEMIDIRECT PRODUCT - 'mp': u'\u2213', # ∓ MINUS-OR-PLUS SIGN - 'odot': u'\u2299', # ⊙ CIRCLED DOT OPERATOR - 'ominus': u'\u2296', # ⊖ CIRCLED MINUS - 'oplus': u'\u2295', # ⊕ CIRCLED PLUS - 'oslash': u'\u2298', # ⊘ CIRCLED DIVISION SLASH - 'otimes': u'\u2297', # ⊗ CIRCLED TIMES - 'pm': u'\xb1', # ± PLUS-MINUS SIGN - 'rhd': u'\u25b7', # ▷ WHITE RIGHT-POINTING TRIANGLE - 'rightthreetimes': u'\u22cc', # ⋌ RIGHT SEMIDIRECT PRODUCT - 'rtimes': u'\u22ca', # ⋊ RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT - 'setminus': u'\u29f5', # ⧵ REVERSE SOLIDUS OPERATOR - 'slash': u'\u2215', # ∕ DIVISION SLASH - 'smallsetminus': u'\u2216', # ∖ SET MINUS - 'smalltriangledown': u'\u25bf', # ▿ WHITE DOWN-POINTING SMALL TRIANGLE - 'smalltriangleleft': u'\u25c3', # ◃ WHITE LEFT-POINTING SMALL TRIANGLE - 'smalltriangleright': u'\u25b9', # ▹ WHITE RIGHT-POINTING SMALL TRIANGLE - 'smalltriangleup': u'\u25b5', # ▵ WHITE UP-POINTING SMALL TRIANGLE - 'sqcap': u'\u2293', # ⊓ SQUARE CAP - 'sqcup': u'\u2294', # ⊔ SQUARE CUP - 'sslash': u'\u2afd', # ⫽ DOUBLE SOLIDUS OPERATOR - 'star': u'\u22c6', # ⋆ STAR OPERATOR - 'talloblong': u'\u2afe', # ⫾ WHITE VERTICAL BAR - 'times': u'\xd7', # × MULTIPLICATION SIGN - 'triangle': u'\u25b3', # △ WHITE UP-POINTING TRIANGLE - 'triangledown': u'\u25bf', # ▿ WHITE DOWN-POINTING SMALL TRIANGLE - 'triangleleft': u'\u25c3', # ◃ WHITE LEFT-POINTING SMALL TRIANGLE - 'triangleright': u'\u25b9', # ▹ WHITE RIGHT-POINTING SMALL TRIANGLE - 'uplus': u'\u228e', # ⊎ MULTISET UNION - 'vartriangle': u'\u25b3', # △ WHITE UP-POINTING TRIANGLE - 'vee': u'\u2228', # ∨ LOGICAL OR - 'veebar': u'\u22bb', # ⊻ XOR - 'wedge': u'\u2227', # ∧ LOGICAL AND - 'wr': u'\u2240', # ≀ WREATH PRODUCT - } -mathclose = { - 'Rbag': u'\u27c6', # ⟆ RIGHT S-SHAPED BAG DELIMITER - 'lrcorner': u'\u231f', # ⌟ BOTTOM RIGHT CORNER - 'rangle': u'\u27e9', # ⟩ MATHEMATICAL RIGHT ANGLE BRACKET - 'rbag': u'\u27c6', # ⟆ RIGHT S-SHAPED BAG DELIMITER - 'rbrace': u'}', # } RIGHT CURLY BRACKET - 'rbrack': u']', # ] RIGHT SQUARE BRACKET - 'rceil': u'\u2309', # ⌉ RIGHT CEILING - 'rfloor': u'\u230b', # ⌋ RIGHT FLOOR - 'rgroup': u'\u27ef', # ⟯ MATHEMATICAL RIGHT FLATTENED PARENTHESIS - 'rrbracket': u'\u27e7', # ⟧ MATHEMATICAL RIGHT WHITE SQUARE BRACKET - 'rrparenthesis': u'\u2988', # ⦈ Z NOTATION RIGHT IMAGE BRACKET - 'urcorner': u'\u231d', # ⌝ TOP RIGHT CORNER - '}': u'}', # } RIGHT CURLY BRACKET - } -mathfence = { - 'Vert': u'\u2016', # ‖ DOUBLE VERTICAL LINE - 'vert': u'|', # | VERTICAL LINE - '|': u'\u2016', # ‖ DOUBLE VERTICAL LINE - } -mathop = { - 'Join': u'\u2a1d', # ⨝ JOIN - 'bigcap': u'\u22c2', # ⋂ N-ARY INTERSECTION - 'bigcup': u'\u22c3', # ⋃ N-ARY UNION - 'biginterleave': u'\u2afc', # ⫼ LARGE TRIPLE VERTICAL BAR OPERATOR - 'bigodot': u'\u2a00', # ⨀ N-ARY CIRCLED DOT OPERATOR - 'bigoplus': u'\u2a01', # ⨁ N-ARY CIRCLED PLUS OPERATOR - 'bigotimes': u'\u2a02', # ⨂ N-ARY CIRCLED TIMES OPERATOR - 'bigsqcup': u'\u2a06', # ⨆ N-ARY SQUARE UNION OPERATOR - 'biguplus': u'\u2a04', # ⨄ N-ARY UNION OPERATOR WITH PLUS - 'bigvee': u'\u22c1', # ⋁ N-ARY LOGICAL OR - 'bigwedge': u'\u22c0', # ⋀ N-ARY LOGICAL AND - 'coprod': u'\u2210', # ∐ N-ARY COPRODUCT - 'fatsemi': u'\u2a1f', # ⨟ Z NOTATION SCHEMA COMPOSITION - 'fint': u'\u2a0f', # ⨏ INTEGRAL AVERAGE WITH SLASH - 'iiiint': u'\u2a0c', # ⨌ QUADRUPLE INTEGRAL OPERATOR - 'iiint': u'\u222d', # ∭ TRIPLE INTEGRAL - 'iint': u'\u222c', # ∬ DOUBLE INTEGRAL - 'int': u'\u222b', # ∫ INTEGRAL - 'oiint': u'\u222f', # ∯ SURFACE INTEGRAL - 'oint': u'\u222e', # ∮ CONTOUR INTEGRAL - 'ointctrclockwise': u'\u2233', # ∳ ANTICLOCKWISE CONTOUR INTEGRAL - 'prod': u'\u220f', # ∏ N-ARY PRODUCT - 'sqint': u'\u2a16', # ⨖ QUATERNION INTEGRAL OPERATOR - 'sum': u'\u2211', # ∑ N-ARY SUMMATION - 'varointclockwise': u'\u2232', # ∲ CLOCKWISE CONTOUR INTEGRAL - } -mathopen = { - 'Lbag': u'\u27c5', # ⟅ LEFT S-SHAPED BAG DELIMITER - 'langle': u'\u27e8', # ⟨ MATHEMATICAL LEFT ANGLE BRACKET - 'lbag': u'\u27c5', # ⟅ LEFT S-SHAPED BAG DELIMITER - 'lbrace': u'{', # { LEFT CURLY BRACKET - 'lbrack': u'[', # [ LEFT SQUARE BRACKET - 'lceil': u'\u2308', # ⌈ LEFT CEILING - 'lfloor': u'\u230a', # ⌊ LEFT FLOOR - 'lgroup': u'\u27ee', # ⟮ MATHEMATICAL LEFT FLATTENED PARENTHESIS - 'llbracket': u'\u27e6', # ⟦ MATHEMATICAL LEFT WHITE SQUARE BRACKET - 'llcorner': u'\u231e', # ⌞ BOTTOM LEFT CORNER - 'llparenthesis': u'\u2987', # ⦇ Z NOTATION LEFT IMAGE BRACKET - 'ulcorner': u'\u231c', # ⌜ TOP LEFT CORNER - '{': u'{', # { LEFT CURLY BRACKET - } -mathord = { - '#': u'#', # # NUMBER SIGN - '$': u'$', # $ DOLLAR SIGN - '%': u'%', # % PERCENT SIGN - '&': u'&', # & AMPERSAND - 'AC': u'\u223f', # ∿ SINE WAVE - 'APLcomment': u'\u235d', # ⍝ APL FUNCTIONAL SYMBOL UP SHOE JOT - 'APLdownarrowbox': u'\u2357', # ⍗ APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW - 'APLinput': u'\u235e', # ⍞ APL FUNCTIONAL SYMBOL QUOTE QUAD - 'APLinv': u'\u2339', # ⌹ APL FUNCTIONAL SYMBOL QUAD DIVIDE - 'APLleftarrowbox': u'\u2347', # ⍇ APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW - 'APLlog': u'\u235f', # ⍟ APL FUNCTIONAL SYMBOL CIRCLE STAR - 'APLrightarrowbox': u'\u2348', # ⍈ APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW - 'APLuparrowbox': u'\u2350', # ⍐ APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW - 'Aries': u'\u2648', # ♈ ARIES - 'CIRCLE': u'\u25cf', # ● BLACK CIRCLE - 'CheckedBox': u'\u2611', # ☑ BALLOT BOX WITH CHECK - 'Diamond': u'\u25c7', # ◇ WHITE DIAMOND - 'Finv': u'\u2132', # Ⅎ TURNED CAPITAL F - 'Game': u'\u2141', # ⅁ TURNED SANS-SERIF CAPITAL G - 'Gemini': u'\u264a', # ♊ GEMINI - 'Jupiter': u'\u2643', # ♃ JUPITER - 'LEFTCIRCLE': u'\u25d6', # ◖ LEFT HALF BLACK CIRCLE - 'LEFTcircle': u'\u25d0', # ◐ CIRCLE WITH LEFT HALF BLACK - 'Leo': u'\u264c', # ♌ LEO - 'Libra': u'\u264e', # ♎ LIBRA - 'Mars': u'\u2642', # ♂ MALE SIGN - 'Mercury': u'\u263f', # ☿ MERCURY - 'Neptune': u'\u2646', # ♆ NEPTUNE - 'Pluto': u'\u2647', # ♇ PLUTO - 'RIGHTCIRCLE': u'\u25d7', # ◗ RIGHT HALF BLACK CIRCLE - 'RIGHTcircle': u'\u25d1', # ◑ CIRCLE WITH RIGHT HALF BLACK - 'Saturn': u'\u2644', # ♄ SATURN - 'Scorpio': u'\u264f', # ♏ SCORPIUS - 'Square': u'\u2610', # ☐ BALLOT BOX - 'Sun': u'\u2609', # ☉ SUN - 'Taurus': u'\u2649', # ♉ TAURUS - 'Uranus': u'\u2645', # ♅ URANUS - 'Venus': u'\u2640', # ♀ FEMALE SIGN - 'XBox': u'\u2612', # ☒ BALLOT BOX WITH X - 'Yup': u'\u2144', # ⅄ TURNED SANS-SERIF CAPITAL Y - '_': u'_', # _ LOW LINE - 'angle': u'\u2220', # ∠ ANGLE - 'aquarius': u'\u2652', # ♒ AQUARIUS - 'aries': u'\u2648', # ♈ ARIES - 'ast': u'*', # * ASTERISK - 'backepsilon': u'\u03f6', # ϶ GREEK REVERSED LUNATE EPSILON SYMBOL - 'backprime': u'\u2035', # ‵ REVERSED PRIME - 'backslash': u'\\', # \ REVERSE SOLIDUS - 'because': u'\u2235', # ∵ BECAUSE - 'bigstar': u'\u2605', # ★ BLACK STAR - 'binampersand': u'&', # & AMPERSAND - 'blacklozenge': u'\u2b27', # ⬧ BLACK MEDIUM LOZENGE - 'blacksmiley': u'\u263b', # ☻ BLACK SMILING FACE - 'blacksquare': u'\u25fc', # ◼ BLACK MEDIUM SQUARE - 'bot': u'\u22a5', # ⊥ UP TACK - 'boy': u'\u2642', # ♂ MALE SIGN - 'cancer': u'\u264b', # ♋ CANCER - 'capricornus': u'\u2651', # ♑ CAPRICORN - 'cdots': u'\u22ef', # ⋯ MIDLINE HORIZONTAL ELLIPSIS - 'cent': u'\xa2', # ¢ CENT SIGN - 'centerdot': u'\u2b1d', # ⬝ BLACK VERY SMALL SQUARE - 'checkmark': u'\u2713', # ✓ CHECK MARK - 'circlearrowleft': u'\u21ba', # ↺ ANTICLOCKWISE OPEN CIRCLE ARROW - 'circlearrowright': u'\u21bb', # ↻ CLOCKWISE OPEN CIRCLE ARROW - 'circledR': u'\xae', # ® REGISTERED SIGN - 'circledcirc': u'\u25ce', # ◎ BULLSEYE - 'clubsuit': u'\u2663', # ♣ BLACK CLUB SUIT - 'complement': u'\u2201', # ∁ COMPLEMENT - 'dasharrow': u'\u21e2', # ⇢ RIGHTWARDS DASHED ARROW - 'dashleftarrow': u'\u21e0', # ⇠ LEFTWARDS DASHED ARROW - 'dashrightarrow': u'\u21e2', # ⇢ RIGHTWARDS DASHED ARROW - 'diameter': u'\u2300', # ⌀ DIAMETER SIGN - 'diamondsuit': u'\u2662', # ♢ WHITE DIAMOND SUIT - 'earth': u'\u2641', # ♁ EARTH - 'exists': u'\u2203', # ∃ THERE EXISTS - 'female': u'\u2640', # ♀ FEMALE SIGN - 'flat': u'\u266d', # ♭ MUSIC FLAT SIGN - 'forall': u'\u2200', # ∀ FOR ALL - 'fourth': u'\u2057', # ⁗ QUADRUPLE PRIME - 'frownie': u'\u2639', # ☹ WHITE FROWNING FACE - 'gemini': u'\u264a', # ♊ GEMINI - 'girl': u'\u2640', # ♀ FEMALE SIGN - 'heartsuit': u'\u2661', # ♡ WHITE HEART SUIT - 'infty': u'\u221e', # ∞ INFINITY - 'invneg': u'\u2310', # ⌐ REVERSED NOT SIGN - 'jupiter': u'\u2643', # ♃ JUPITER - 'ldots': u'\u2026', # … HORIZONTAL ELLIPSIS - 'leftmoon': u'\u263e', # ☾ LAST QUARTER MOON - 'leftturn': u'\u21ba', # ↺ ANTICLOCKWISE OPEN CIRCLE ARROW - 'leo': u'\u264c', # ♌ LEO - 'libra': u'\u264e', # ♎ LIBRA - 'lnot': u'\xac', # ¬ NOT SIGN - 'lozenge': u'\u25ca', # ◊ LOZENGE - 'male': u'\u2642', # ♂ MALE SIGN - 'maltese': u'\u2720', # ✠ MALTESE CROSS - 'mathdollar': u'$', # $ DOLLAR SIGN - 'measuredangle': u'\u2221', # ∡ MEASURED ANGLE - 'mercury': u'\u263f', # ☿ MERCURY - 'mho': u'\u2127', # ℧ INVERTED OHM SIGN - 'nabla': u'\u2207', # ∇ NABLA - 'natural': u'\u266e', # ♮ MUSIC NATURAL SIGN - 'neg': u'\xac', # ¬ NOT SIGN - 'neptune': u'\u2646', # ♆ NEPTUNE - 'nexists': u'\u2204', # ∄ THERE DOES NOT EXIST - 'notbackslash': u'\u2340', # ⍀ APL FUNCTIONAL SYMBOL BACKSLASH BAR - 'partial': u'\u2202', # ∂ PARTIAL DIFFERENTIAL - 'pisces': u'\u2653', # ♓ PISCES - 'pluto': u'\u2647', # ♇ PLUTO - 'pounds': u'\xa3', # £ POUND SIGN - 'prime': u'\u2032', # ′ PRIME - 'quarternote': u'\u2669', # ♩ QUARTER NOTE - 'rightmoon': u'\u263d', # ☽ FIRST QUARTER MOON - 'rightturn': u'\u21bb', # ↻ CLOCKWISE OPEN CIRCLE ARROW - 'sagittarius': u'\u2650', # ♐ SAGITTARIUS - 'saturn': u'\u2644', # ♄ SATURN - 'scorpio': u'\u264f', # ♏ SCORPIUS - 'second': u'\u2033', # ″ DOUBLE PRIME - 'sharp': u'\u266f', # ♯ MUSIC SHARP SIGN - 'sim': u'~', # ~ TILDE - 'slash': u'/', # / SOLIDUS - 'smiley': u'\u263a', # ☺ WHITE SMILING FACE - 'spadesuit': u'\u2660', # ♠ BLACK SPADE SUIT - 'spddot': u'\xa8', # ¨ DIAERESIS - 'sphat': u'^', # ^ CIRCUMFLEX ACCENT - 'sphericalangle': u'\u2222', # ∢ SPHERICAL ANGLE - 'sptilde': u'~', # ~ TILDE - 'square': u'\u25fb', # ◻ WHITE MEDIUM SQUARE - 'sun': u'\u263c', # ☼ WHITE SUN WITH RAYS - 'taurus': u'\u2649', # ♉ TAURUS - 'therefore': u'\u2234', # ∴ THEREFORE - 'third': u'\u2034', # ‴ TRIPLE PRIME - 'top': u'\u22a4', # ⊤ DOWN TACK - 'triangleleft': u'\u25c5', # ◅ WHITE LEFT-POINTING POINTER - 'triangleright': u'\u25bb', # ▻ WHITE RIGHT-POINTING POINTER - 'twonotes': u'\u266b', # ♫ BEAMED EIGHTH NOTES - 'uranus': u'\u2645', # ♅ URANUS - 'varEarth': u'\u2641', # ♁ EARTH - 'varnothing': u'\u2205', # ∅ EMPTY SET - 'virgo': u'\u264d', # ♍ VIRGO - 'wasylozenge': u'\u2311', # ⌑ SQUARE LOZENGE - 'wasytherefore': u'\u2234', # ∴ THEREFORE - 'yen': u'\xa5', # ¥ YEN SIGN - } -mathover = { - 'overbrace': u'\u23de', # ⏞ TOP CURLY BRACKET - 'wideparen': u'\u23dc', # ⏜ TOP PARENTHESIS - } -mathradical = { - 'sqrt': u'\u221a', # √ SQUARE ROOT - 'sqrt[3]': u'\u221b', # ∛ CUBE ROOT - 'sqrt[4]': u'\u221c', # ∜ FOURTH ROOT - } -mathrel = { - 'Bumpeq': u'\u224e', # ≎ GEOMETRICALLY EQUIVALENT TO - 'Doteq': u'\u2251', # ≑ GEOMETRICALLY EQUAL TO - 'Downarrow': u'\u21d3', # ⇓ DOWNWARDS DOUBLE ARROW - 'Leftarrow': u'\u21d0', # ⇐ LEFTWARDS DOUBLE ARROW - 'Leftrightarrow': u'\u21d4', # ⇔ LEFT RIGHT DOUBLE ARROW - 'Lleftarrow': u'\u21da', # ⇚ LEFTWARDS TRIPLE ARROW - 'Longleftarrow': u'\u27f8', # ⟸ LONG LEFTWARDS DOUBLE ARROW - 'Longleftrightarrow': u'\u27fa', # ⟺ LONG LEFT RIGHT DOUBLE ARROW - 'Longmapsfrom': u'\u27fd', # ⟽ LONG LEFTWARDS DOUBLE ARROW FROM BAR - 'Longmapsto': u'\u27fe', # ⟾ LONG RIGHTWARDS DOUBLE ARROW FROM BAR - 'Longrightarrow': u'\u27f9', # ⟹ LONG RIGHTWARDS DOUBLE ARROW - 'Lsh': u'\u21b0', # ↰ UPWARDS ARROW WITH TIP LEFTWARDS - 'Mapsfrom': u'\u2906', # ⤆ LEFTWARDS DOUBLE ARROW FROM BAR - 'Mapsto': u'\u2907', # ⤇ RIGHTWARDS DOUBLE ARROW FROM BAR - 'Rightarrow': u'\u21d2', # ⇒ RIGHTWARDS DOUBLE ARROW - 'Rrightarrow': u'\u21db', # ⇛ RIGHTWARDS TRIPLE ARROW - 'Rsh': u'\u21b1', # ↱ UPWARDS ARROW WITH TIP RIGHTWARDS - 'Subset': u'\u22d0', # ⋐ DOUBLE SUBSET - 'Supset': u'\u22d1', # ⋑ DOUBLE SUPERSET - 'Uparrow': u'\u21d1', # ⇑ UPWARDS DOUBLE ARROW - 'Updownarrow': u'\u21d5', # ⇕ UP DOWN DOUBLE ARROW - 'VDash': u'\u22ab', # ⊫ DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE - 'Vdash': u'\u22a9', # ⊩ FORCES - 'Vvdash': u'\u22aa', # ⊪ TRIPLE VERTICAL BAR RIGHT TURNSTILE - 'apprge': u'\u2273', # ≳ GREATER-THAN OR EQUIVALENT TO - 'apprle': u'\u2272', # ≲ LESS-THAN OR EQUIVALENT TO - 'approx': u'\u2248', # ≈ ALMOST EQUAL TO - 'approxeq': u'\u224a', # ≊ ALMOST EQUAL OR EQUAL TO - 'asymp': u'\u224d', # ≍ EQUIVALENT TO - 'backsim': u'\u223d', # ∽ REVERSED TILDE - 'backsimeq': u'\u22cd', # ⋍ REVERSED TILDE EQUALS - 'barin': u'\u22f6', # ⋶ ELEMENT OF WITH OVERBAR - 'barleftharpoon': u'\u296b', # ⥫ LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH - 'barrightharpoon': u'\u296d', # ⥭ RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH - 'between': u'\u226c', # ≬ BETWEEN - 'bowtie': u'\u22c8', # ⋈ BOWTIE - 'bumpeq': u'\u224f', # ≏ DIFFERENCE BETWEEN - 'circeq': u'\u2257', # ≗ RING EQUAL TO - 'coloneq': u'\u2254', # ≔ COLON EQUALS - 'cong': u'\u2245', # ≅ APPROXIMATELY EQUAL TO - 'corresponds': u'\u2259', # ≙ ESTIMATES - 'curlyeqprec': u'\u22de', # ⋞ EQUAL TO OR PRECEDES - 'curlyeqsucc': u'\u22df', # ⋟ EQUAL TO OR SUCCEEDS - 'curvearrowleft': u'\u21b6', # ↶ ANTICLOCKWISE TOP SEMICIRCLE ARROW - 'curvearrowright': u'\u21b7', # ↷ CLOCKWISE TOP SEMICIRCLE ARROW - 'dashv': u'\u22a3', # ⊣ LEFT TACK - 'ddots': u'\u22f1', # ⋱ DOWN RIGHT DIAGONAL ELLIPSIS - 'dlsh': u'\u21b2', # ↲ DOWNWARDS ARROW WITH TIP LEFTWARDS - 'doteq': u'\u2250', # ≐ APPROACHES THE LIMIT - 'doteqdot': u'\u2251', # ≑ GEOMETRICALLY EQUAL TO - 'downarrow': u'\u2193', # ↓ DOWNWARDS ARROW - 'downdownarrows': u'\u21ca', # ⇊ DOWNWARDS PAIRED ARROWS - 'downdownharpoons': u'\u2965', # ⥥ DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT - 'downharpoonleft': u'\u21c3', # ⇃ DOWNWARDS HARPOON WITH BARB LEFTWARDS - 'downharpoonright': u'\u21c2', # ⇂ DOWNWARDS HARPOON WITH BARB RIGHTWARDS - 'downuparrows': u'\u21f5', # ⇵ DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW - 'downupharpoons': u'\u296f', # ⥯ DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT - 'drsh': u'\u21b3', # ↳ DOWNWARDS ARROW WITH TIP RIGHTWARDS - 'eqcirc': u'\u2256', # ≖ RING IN EQUAL TO - 'eqcolon': u'\u2255', # ≕ EQUALS COLON - 'eqsim': u'\u2242', # ≂ MINUS TILDE - 'eqslantgtr': u'\u2a96', # ⪖ SLANTED EQUAL TO OR GREATER-THAN - 'eqslantless': u'\u2a95', # ⪕ SLANTED EQUAL TO OR LESS-THAN - 'equiv': u'\u2261', # ≡ IDENTICAL TO - 'fallingdotseq': u'\u2252', # ≒ APPROXIMATELY EQUAL TO OR THE IMAGE OF - 'frown': u'\u2322', # ⌢ FROWN - 'ge': u'\u2265', # ≥ GREATER-THAN OR EQUAL TO - 'geq': u'\u2265', # ≥ GREATER-THAN OR EQUAL TO - 'geqq': u'\u2267', # ≧ GREATER-THAN OVER EQUAL TO - 'geqslant': u'\u2a7e', # ⩾ GREATER-THAN OR SLANTED EQUAL TO - 'gets': u'\u2190', # ← LEFTWARDS ARROW - 'gg': u'\u226b', # ≫ MUCH GREATER-THAN - 'ggcurly': u'\u2abc', # ⪼ DOUBLE SUCCEEDS - 'ggg': u'\u22d9', # ⋙ VERY MUCH GREATER-THAN - 'gnapprox': u'\u2a8a', # ⪊ GREATER-THAN AND NOT APPROXIMATE - 'gneq': u'\u2a88', # ⪈ GREATER-THAN AND SINGLE-LINE NOT EQUAL TO - 'gneqq': u'\u2269', # ≩ GREATER-THAN BUT NOT EQUAL TO - 'gnsim': u'\u22e7', # ⋧ GREATER-THAN BUT NOT EQUIVALENT TO - 'gtrapprox': u'\u2a86', # ⪆ GREATER-THAN OR APPROXIMATE - 'gtrdot': u'\u22d7', # ⋗ GREATER-THAN WITH DOT - 'gtreqless': u'\u22db', # ⋛ GREATER-THAN EQUAL TO OR LESS-THAN - 'gtreqqless': u'\u2a8c', # ⪌ GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN - 'gtrless': u'\u2277', # ≷ GREATER-THAN OR LESS-THAN - 'gtrsim': u'\u2273', # ≳ GREATER-THAN OR EQUIVALENT TO - 'hash': u'\u22d5', # ⋕ EQUAL AND PARALLEL TO - 'hookleftarrow': u'\u21a9', # ↩ LEFTWARDS ARROW WITH HOOK - 'hookrightarrow': u'\u21aa', # ↪ RIGHTWARDS ARROW WITH HOOK - 'iddots': u'\u22f0', # ⋰ UP RIGHT DIAGONAL ELLIPSIS - 'impliedby': u'\u27f8', # ⟸ LONG LEFTWARDS DOUBLE ARROW - 'implies': u'\u27f9', # ⟹ LONG RIGHTWARDS DOUBLE ARROW - 'in': u'\u2208', # ∈ ELEMENT OF - 'le': u'\u2264', # ≤ LESS-THAN OR EQUAL TO - 'leftarrow': u'\u2190', # ← LEFTWARDS ARROW - 'leftarrowtail': u'\u21a2', # ↢ LEFTWARDS ARROW WITH TAIL - 'leftarrowtriangle': u'\u21fd', # ⇽ LEFTWARDS OPEN-HEADED ARROW - 'leftbarharpoon': u'\u296a', # ⥪ LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH - 'leftharpoondown': u'\u21bd', # ↽ LEFTWARDS HARPOON WITH BARB DOWNWARDS - 'leftharpoonup': u'\u21bc', # ↼ LEFTWARDS HARPOON WITH BARB UPWARDS - 'leftleftarrows': u'\u21c7', # ⇇ LEFTWARDS PAIRED ARROWS - 'leftleftharpoons': u'\u2962', # ⥢ LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN - 'leftrightarrow': u'\u2194', # ↔ LEFT RIGHT ARROW - 'leftrightarrows': u'\u21c6', # ⇆ LEFTWARDS ARROW OVER RIGHTWARDS ARROW - 'leftrightarrowtriangle': u'\u21ff', # ⇿ LEFT RIGHT OPEN-HEADED ARROW - 'leftrightharpoon': u'\u294a', # ⥊ LEFT BARB UP RIGHT BARB DOWN HARPOON - 'leftrightharpoons': u'\u21cb', # ⇋ LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON - 'leftrightsquigarrow': u'\u21ad', # ↭ LEFT RIGHT WAVE ARROW - 'leftslice': u'\u2aa6', # ⪦ LESS-THAN CLOSED BY CURVE - 'leftsquigarrow': u'\u21dc', # ⇜ LEFTWARDS SQUIGGLE ARROW - 'leq': u'\u2264', # ≤ LESS-THAN OR EQUAL TO - 'leqq': u'\u2266', # ≦ LESS-THAN OVER EQUAL TO - 'leqslant': u'\u2a7d', # ⩽ LESS-THAN OR SLANTED EQUAL TO - 'lessapprox': u'\u2a85', # ⪅ LESS-THAN OR APPROXIMATE - 'lessdot': u'\u22d6', # ⋖ LESS-THAN WITH DOT - 'lesseqgtr': u'\u22da', # ⋚ LESS-THAN EQUAL TO OR GREATER-THAN - 'lesseqqgtr': u'\u2a8b', # ⪋ LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN - 'lessgtr': u'\u2276', # ≶ LESS-THAN OR GREATER-THAN - 'lesssim': u'\u2272', # ≲ LESS-THAN OR EQUIVALENT TO - 'lightning': u'\u21af', # ↯ DOWNWARDS ZIGZAG ARROW - 'll': u'\u226a', # ≪ MUCH LESS-THAN - 'llcurly': u'\u2abb', # ⪻ DOUBLE PRECEDES - 'lll': u'\u22d8', # ⋘ VERY MUCH LESS-THAN - 'lnapprox': u'\u2a89', # ⪉ LESS-THAN AND NOT APPROXIMATE - 'lneq': u'\u2a87', # ⪇ LESS-THAN AND SINGLE-LINE NOT EQUAL TO - 'lneqq': u'\u2268', # ≨ LESS-THAN BUT NOT EQUAL TO - 'lnsim': u'\u22e6', # ⋦ LESS-THAN BUT NOT EQUIVALENT TO - 'longleftarrow': u'\u27f5', # ⟵ LONG LEFTWARDS ARROW - 'longleftrightarrow': u'\u27f7', # ⟷ LONG LEFT RIGHT ARROW - 'longmapsfrom': u'\u27fb', # ⟻ LONG LEFTWARDS ARROW FROM BAR - 'longmapsto': u'\u27fc', # ⟼ LONG RIGHTWARDS ARROW FROM BAR - 'longrightarrow': u'\u27f6', # ⟶ LONG RIGHTWARDS ARROW - 'looparrowleft': u'\u21ab', # ↫ LEFTWARDS ARROW WITH LOOP - 'looparrowright': u'\u21ac', # ↬ RIGHTWARDS ARROW WITH LOOP - 'mapsfrom': u'\u21a4', # ↤ LEFTWARDS ARROW FROM BAR - 'mapsto': u'\u21a6', # ↦ RIGHTWARDS ARROW FROM BAR - 'mid': u'\u2223', # ∣ DIVIDES - 'models': u'\u22a7', # ⊧ MODELS - 'multimap': u'\u22b8', # ⊸ MULTIMAP - 'nLeftarrow': u'\u21cd', # ⇍ LEFTWARDS DOUBLE ARROW WITH STROKE - 'nLeftrightarrow': u'\u21ce', # ⇎ LEFT RIGHT DOUBLE ARROW WITH STROKE - 'nRightarrow': u'\u21cf', # ⇏ RIGHTWARDS DOUBLE ARROW WITH STROKE - 'nVDash': u'\u22af', # ⊯ NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE - 'nVdash': u'\u22ae', # ⊮ DOES NOT FORCE - 'ncong': u'\u2247', # ≇ NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO - 'ne': u'\u2260', # ≠ NOT EQUAL TO - 'nearrow': u'\u2197', # ↗ NORTH EAST ARROW - 'neq': u'\u2260', # ≠ NOT EQUAL TO - 'ngeq': u'\u2271', # ≱ NEITHER GREATER-THAN NOR EQUAL TO - 'ngtr': u'\u226f', # ≯ NOT GREATER-THAN - 'ni': u'\u220b', # ∋ CONTAINS AS MEMBER - 'nleftarrow': u'\u219a', # ↚ LEFTWARDS ARROW WITH STROKE - 'nleftrightarrow': u'\u21ae', # ↮ LEFT RIGHT ARROW WITH STROKE - 'nleq': u'\u2270', # ≰ NEITHER LESS-THAN NOR EQUAL TO - 'nless': u'\u226e', # ≮ NOT LESS-THAN - 'nmid': u'\u2224', # ∤ DOES NOT DIVIDE - 'notasymp': u'\u226d', # ≭ NOT EQUIVALENT TO - 'notin': u'\u2209', # ∉ NOT AN ELEMENT OF - 'notowner': u'\u220c', # ∌ DOES NOT CONTAIN AS MEMBER - 'notslash': u'\u233f', # ⌿ APL FUNCTIONAL SYMBOL SLASH BAR - 'nparallel': u'\u2226', # ∦ NOT PARALLEL TO - 'nprec': u'\u2280', # ⊀ DOES NOT PRECEDE - 'npreceq': u'\u22e0', # ⋠ DOES NOT PRECEDE OR EQUAL - 'nrightarrow': u'\u219b', # ↛ RIGHTWARDS ARROW WITH STROKE - 'nsim': u'\u2241', # ≁ NOT TILDE - 'nsubseteq': u'\u2288', # ⊈ NEITHER A SUBSET OF NOR EQUAL TO - 'nsucc': u'\u2281', # ⊁ DOES NOT SUCCEED - 'nsucceq': u'\u22e1', # ⋡ DOES NOT SUCCEED OR EQUAL - 'nsupseteq': u'\u2289', # ⊉ NEITHER A SUPERSET OF NOR EQUAL TO - 'ntriangleleft': u'\u22ea', # ⋪ NOT NORMAL SUBGROUP OF - 'ntrianglelefteq': u'\u22ec', # ⋬ NOT NORMAL SUBGROUP OF OR EQUAL TO - 'ntriangleright': u'\u22eb', # ⋫ DOES NOT CONTAIN AS NORMAL SUBGROUP - 'ntrianglerighteq': u'\u22ed', # ⋭ DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL - 'nvDash': u'\u22ad', # ⊭ NOT TRUE - 'nvdash': u'\u22ac', # ⊬ DOES NOT PROVE - 'nwarrow': u'\u2196', # ↖ NORTH WEST ARROW - 'owns': u'\u220b', # ∋ CONTAINS AS MEMBER - 'parallel': u'\u2225', # ∥ PARALLEL TO - 'perp': u'\u27c2', # ⟂ PERPENDICULAR - 'pitchfork': u'\u22d4', # ⋔ PITCHFORK - 'prec': u'\u227a', # ≺ PRECEDES - 'precapprox': u'\u2ab7', # ⪷ PRECEDES ABOVE ALMOST EQUAL TO - 'preccurlyeq': u'\u227c', # ≼ PRECEDES OR EQUAL TO - 'preceq': u'\u2aaf', # ⪯ PRECEDES ABOVE SINGLE-LINE EQUALS SIGN - 'precnapprox': u'\u2ab9', # ⪹ PRECEDES ABOVE NOT ALMOST EQUAL TO - 'precnsim': u'\u22e8', # ⋨ PRECEDES BUT NOT EQUIVALENT TO - 'precsim': u'\u227e', # ≾ PRECEDES OR EQUIVALENT TO - 'propto': u'\u221d', # ∝ PROPORTIONAL TO - 'restriction': u'\u21be', # ↾ UPWARDS HARPOON WITH BARB RIGHTWARDS - 'rightarrow': u'\u2192', # → RIGHTWARDS ARROW - 'rightarrowtail': u'\u21a3', # ↣ RIGHTWARDS ARROW WITH TAIL - 'rightarrowtriangle': u'\u21fe', # ⇾ RIGHTWARDS OPEN-HEADED ARROW - 'rightbarharpoon': u'\u296c', # ⥬ RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH - 'rightharpoondown': u'\u21c1', # ⇁ RIGHTWARDS HARPOON WITH BARB DOWNWARDS - 'rightharpoonup': u'\u21c0', # ⇀ RIGHTWARDS HARPOON WITH BARB UPWARDS - 'rightleftarrows': u'\u21c4', # ⇄ RIGHTWARDS ARROW OVER LEFTWARDS ARROW - 'rightleftharpoon': u'\u294b', # ⥋ LEFT BARB DOWN RIGHT BARB UP HARPOON - 'rightleftharpoons': u'\u21cc', # ⇌ RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON - 'rightrightarrows': u'\u21c9', # ⇉ RIGHTWARDS PAIRED ARROWS - 'rightrightharpoons': u'\u2964', # ⥤ RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN - 'rightslice': u'\u2aa7', # ⪧ GREATER-THAN CLOSED BY CURVE - 'rightsquigarrow': u'\u21dd', # ⇝ RIGHTWARDS SQUIGGLE ARROW - 'risingdotseq': u'\u2253', # ≓ IMAGE OF OR APPROXIMATELY EQUAL TO - 'searrow': u'\u2198', # ↘ SOUTH EAST ARROW - 'sim': u'\u223c', # ∼ TILDE OPERATOR - 'simeq': u'\u2243', # ≃ ASYMPTOTICALLY EQUAL TO - 'smallfrown': u'\u2322', # ⌢ FROWN - 'smallsmile': u'\u2323', # ⌣ SMILE - 'smile': u'\u2323', # ⌣ SMILE - 'sqsubset': u'\u228f', # ⊏ SQUARE IMAGE OF - 'sqsubseteq': u'\u2291', # ⊑ SQUARE IMAGE OF OR EQUAL TO - 'sqsupset': u'\u2290', # ⊐ SQUARE ORIGINAL OF - 'sqsupseteq': u'\u2292', # ⊒ SQUARE ORIGINAL OF OR EQUAL TO - 'subset': u'\u2282', # ⊂ SUBSET OF - 'subseteq': u'\u2286', # ⊆ SUBSET OF OR EQUAL TO - 'subseteqq': u'\u2ac5', # ⫅ SUBSET OF ABOVE EQUALS SIGN - 'subsetneq': u'\u228a', # ⊊ SUBSET OF WITH NOT EQUAL TO - 'subsetneqq': u'\u2acb', # ⫋ SUBSET OF ABOVE NOT EQUAL TO - 'succ': u'\u227b', # ≻ SUCCEEDS - 'succapprox': u'\u2ab8', # ⪸ SUCCEEDS ABOVE ALMOST EQUAL TO - 'succcurlyeq': u'\u227d', # ≽ SUCCEEDS OR EQUAL TO - 'succeq': u'\u2ab0', # ⪰ SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN - 'succnapprox': u'\u2aba', # ⪺ SUCCEEDS ABOVE NOT ALMOST EQUAL TO - 'succnsim': u'\u22e9', # ⋩ SUCCEEDS BUT NOT EQUIVALENT TO - 'succsim': u'\u227f', # ≿ SUCCEEDS OR EQUIVALENT TO - 'supset': u'\u2283', # ⊃ SUPERSET OF - 'supseteq': u'\u2287', # ⊇ SUPERSET OF OR EQUAL TO - 'supseteqq': u'\u2ac6', # ⫆ SUPERSET OF ABOVE EQUALS SIGN - 'supsetneq': u'\u228b', # ⊋ SUPERSET OF WITH NOT EQUAL TO - 'supsetneqq': u'\u2acc', # ⫌ SUPERSET OF ABOVE NOT EQUAL TO - 'swarrow': u'\u2199', # ↙ SOUTH WEST ARROW - 'to': u'\u2192', # → RIGHTWARDS ARROW - 'trianglelefteq': u'\u22b4', # ⊴ NORMAL SUBGROUP OF OR EQUAL TO - 'triangleq': u'\u225c', # ≜ DELTA EQUAL TO - 'trianglerighteq': u'\u22b5', # ⊵ CONTAINS AS NORMAL SUBGROUP OR EQUAL TO - 'twoheadleftarrow': u'\u219e', # ↞ LEFTWARDS TWO HEADED ARROW - 'twoheadrightarrow': u'\u21a0', # ↠ RIGHTWARDS TWO HEADED ARROW - 'uparrow': u'\u2191', # ↑ UPWARDS ARROW - 'updownarrow': u'\u2195', # ↕ UP DOWN ARROW - 'updownarrows': u'\u21c5', # ⇅ UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW - 'updownharpoons': u'\u296e', # ⥮ UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT - 'upharpoonleft': u'\u21bf', # ↿ UPWARDS HARPOON WITH BARB LEFTWARDS - 'upharpoonright': u'\u21be', # ↾ UPWARDS HARPOON WITH BARB RIGHTWARDS - 'upuparrows': u'\u21c8', # ⇈ UPWARDS PAIRED ARROWS - 'upupharpoons': u'\u2963', # ⥣ UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT - 'vDash': u'\u22a8', # ⊨ TRUE - 'varpropto': u'\u221d', # ∝ PROPORTIONAL TO - 'vartriangleleft': u'\u22b2', # ⊲ NORMAL SUBGROUP OF - 'vartriangleright': u'\u22b3', # ⊳ CONTAINS AS NORMAL SUBGROUP - 'vdash': u'\u22a2', # ⊢ RIGHT TACK - 'vdots': u'\u22ee', # ⋮ VERTICAL ELLIPSIS - } -mathunder = { - 'underbrace': u'\u23df', # ⏟ BOTTOM CURLY BRACKET - } -space = { - ':': u'\u205f', #   MEDIUM MATHEMATICAL SPACE - 'medspace': u'\u205f', #   MEDIUM MATHEMATICAL SPACE - 'quad': u'\u2001', #   EM QUAD - } diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/unichar2tex.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/unichar2tex.py deleted file mode 100644 index 0e0b808..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/math/unichar2tex.py +++ /dev/null @@ -1,788 +0,0 @@ -# LaTeX math to Unicode symbols translation table -# for use with the translate() method of unicode objects. -# Generated with ``write_unichar2tex.py`` from the data in -# http://milde.users.sourceforge.net/LUCR/Math/ - -# Includes commands from: standard LaTeX, amssymb, amsmath - -uni2tex_table = { -160: u'~', -163: u'\\pounds ', -165: u'\\yen ', -172: u'\\neg ', -174: u'\\circledR ', -177: u'\\pm ', -215: u'\\times ', -240: u'\\eth ', -247: u'\\div ', -305: u'\\imath ', -567: u'\\jmath ', -915: u'\\Gamma ', -916: u'\\Delta ', -920: u'\\Theta ', -923: u'\\Lambda ', -926: u'\\Xi ', -928: u'\\Pi ', -931: u'\\Sigma ', -933: u'\\Upsilon ', -934: u'\\Phi ', -936: u'\\Psi ', -937: u'\\Omega ', -945: u'\\alpha ', -946: u'\\beta ', -947: u'\\gamma ', -948: u'\\delta ', -949: u'\\varepsilon ', -950: u'\\zeta ', -951: u'\\eta ', -952: u'\\theta ', -953: u'\\iota ', -954: u'\\kappa ', -955: u'\\lambda ', -956: u'\\mu ', -957: u'\\nu ', -958: u'\\xi ', -960: u'\\pi ', -961: u'\\rho ', -962: u'\\varsigma ', -963: u'\\sigma ', -964: u'\\tau ', -965: u'\\upsilon ', -966: u'\\varphi ', -967: u'\\chi ', -968: u'\\psi ', -969: u'\\omega ', -977: u'\\vartheta ', -981: u'\\phi ', -982: u'\\varpi ', -989: u'\\digamma ', -1014: u'\\backepsilon ', -8193: u'\\quad ', -8214: u'\\| ', -8224: u'\\dagger ', -8225: u'\\ddagger ', -8230: u'\\ldots ', -8242: u'\\prime ', -8245: u'\\backprime ', -8287: u'\\: ', -8450: u'\\mathbb{C}', -8459: u'\\mathcal{H}', -8460: u'\\mathfrak{H}', -8461: u'\\mathbb{H}', -8463: u'\\hslash ', -8464: u'\\mathcal{I}', -8465: u'\\Im ', -8466: u'\\mathcal{L}', -8467: u'\\ell ', -8469: u'\\mathbb{N}', -8472: u'\\wp ', -8473: u'\\mathbb{P}', -8474: u'\\mathbb{Q}', -8475: u'\\mathcal{R}', -8476: u'\\Re ', -8477: u'\\mathbb{R}', -8484: u'\\mathbb{Z}', -8487: u'\\mho ', -8488: u'\\mathfrak{Z}', -8492: u'\\mathcal{B}', -8493: u'\\mathfrak{C}', -8496: u'\\mathcal{E}', -8497: u'\\mathcal{F}', -8498: u'\\Finv ', -8499: u'\\mathcal{M}', -8501: u'\\aleph ', -8502: u'\\beth ', -8503: u'\\gimel ', -8504: u'\\daleth ', -8592: u'\\leftarrow ', -8593: u'\\uparrow ', -8594: u'\\rightarrow ', -8595: u'\\downarrow ', -8596: u'\\leftrightarrow ', -8597: u'\\updownarrow ', -8598: u'\\nwarrow ', -8599: u'\\nearrow ', -8600: u'\\searrow ', -8601: u'\\swarrow ', -8602: u'\\nleftarrow ', -8603: u'\\nrightarrow ', -8606: u'\\twoheadleftarrow ', -8608: u'\\twoheadrightarrow ', -8610: u'\\leftarrowtail ', -8611: u'\\rightarrowtail ', -8614: u'\\mapsto ', -8617: u'\\hookleftarrow ', -8618: u'\\hookrightarrow ', -8619: u'\\looparrowleft ', -8620: u'\\looparrowright ', -8621: u'\\leftrightsquigarrow ', -8622: u'\\nleftrightarrow ', -8624: u'\\Lsh ', -8625: u'\\Rsh ', -8630: u'\\curvearrowleft ', -8631: u'\\curvearrowright ', -8634: u'\\circlearrowleft ', -8635: u'\\circlearrowright ', -8636: u'\\leftharpoonup ', -8637: u'\\leftharpoondown ', -8638: u'\\upharpoonright ', -8639: u'\\upharpoonleft ', -8640: u'\\rightharpoonup ', -8641: u'\\rightharpoondown ', -8642: u'\\downharpoonright ', -8643: u'\\downharpoonleft ', -8644: u'\\rightleftarrows ', -8646: u'\\leftrightarrows ', -8647: u'\\leftleftarrows ', -8648: u'\\upuparrows ', -8649: u'\\rightrightarrows ', -8650: u'\\downdownarrows ', -8651: u'\\leftrightharpoons ', -8652: u'\\rightleftharpoons ', -8653: u'\\nLeftarrow ', -8654: u'\\nLeftrightarrow ', -8655: u'\\nRightarrow ', -8656: u'\\Leftarrow ', -8657: u'\\Uparrow ', -8658: u'\\Rightarrow ', -8659: u'\\Downarrow ', -8660: u'\\Leftrightarrow ', -8661: u'\\Updownarrow ', -8666: u'\\Lleftarrow ', -8667: u'\\Rrightarrow ', -8669: u'\\rightsquigarrow ', -8672: u'\\dashleftarrow ', -8674: u'\\dashrightarrow ', -8704: u'\\forall ', -8705: u'\\complement ', -8706: u'\\partial ', -8707: u'\\exists ', -8708: u'\\nexists ', -8709: u'\\varnothing ', -8711: u'\\nabla ', -8712: u'\\in ', -8713: u'\\notin ', -8715: u'\\ni ', -8719: u'\\prod ', -8720: u'\\coprod ', -8721: u'\\sum ', -8722: u'-', -8723: u'\\mp ', -8724: u'\\dotplus ', -8725: u'\\slash ', -8726: u'\\smallsetminus ', -8727: u'\\ast ', -8728: u'\\circ ', -8729: u'\\bullet ', -8730: u'\\sqrt ', -8731: u'\\sqrt[3] ', -8732: u'\\sqrt[4] ', -8733: u'\\propto ', -8734: u'\\infty ', -8736: u'\\angle ', -8737: u'\\measuredangle ', -8738: u'\\sphericalangle ', -8739: u'\\mid ', -8740: u'\\nmid ', -8741: u'\\parallel ', -8742: u'\\nparallel ', -8743: u'\\wedge ', -8744: u'\\vee ', -8745: u'\\cap ', -8746: u'\\cup ', -8747: u'\\int ', -8748: u'\\iint ', -8749: u'\\iiint ', -8750: u'\\oint ', -8756: u'\\therefore ', -8757: u'\\because ', -8758: u':', -8764: u'\\sim ', -8765: u'\\backsim ', -8768: u'\\wr ', -8769: u'\\nsim ', -8770: u'\\eqsim ', -8771: u'\\simeq ', -8773: u'\\cong ', -8775: u'\\ncong ', -8776: u'\\approx ', -8778: u'\\approxeq ', -8781: u'\\asymp ', -8782: u'\\Bumpeq ', -8783: u'\\bumpeq ', -8784: u'\\doteq ', -8785: u'\\Doteq ', -8786: u'\\fallingdotseq ', -8787: u'\\risingdotseq ', -8790: u'\\eqcirc ', -8791: u'\\circeq ', -8796: u'\\triangleq ', -8800: u'\\neq ', -8801: u'\\equiv ', -8804: u'\\leq ', -8805: u'\\geq ', -8806: u'\\leqq ', -8807: u'\\geqq ', -8808: u'\\lneqq ', -8809: u'\\gneqq ', -8810: u'\\ll ', -8811: u'\\gg ', -8812: u'\\between ', -8814: u'\\nless ', -8815: u'\\ngtr ', -8816: u'\\nleq ', -8817: u'\\ngeq ', -8818: u'\\lesssim ', -8819: u'\\gtrsim ', -8822: u'\\lessgtr ', -8823: u'\\gtrless ', -8826: u'\\prec ', -8827: u'\\succ ', -8828: u'\\preccurlyeq ', -8829: u'\\succcurlyeq ', -8830: u'\\precsim ', -8831: u'\\succsim ', -8832: u'\\nprec ', -8833: u'\\nsucc ', -8834: u'\\subset ', -8835: u'\\supset ', -8838: u'\\subseteq ', -8839: u'\\supseteq ', -8840: u'\\nsubseteq ', -8841: u'\\nsupseteq ', -8842: u'\\subsetneq ', -8843: u'\\supsetneq ', -8846: u'\\uplus ', -8847: u'\\sqsubset ', -8848: u'\\sqsupset ', -8849: u'\\sqsubseteq ', -8850: u'\\sqsupseteq ', -8851: u'\\sqcap ', -8852: u'\\sqcup ', -8853: u'\\oplus ', -8854: u'\\ominus ', -8855: u'\\otimes ', -8856: u'\\oslash ', -8857: u'\\odot ', -8858: u'\\circledcirc ', -8859: u'\\circledast ', -8861: u'\\circleddash ', -8862: u'\\boxplus ', -8863: u'\\boxminus ', -8864: u'\\boxtimes ', -8865: u'\\boxdot ', -8866: u'\\vdash ', -8867: u'\\dashv ', -8868: u'\\top ', -8869: u'\\bot ', -8871: u'\\models ', -8872: u'\\vDash ', -8873: u'\\Vdash ', -8874: u'\\Vvdash ', -8876: u'\\nvdash ', -8877: u'\\nvDash ', -8878: u'\\nVdash ', -8879: u'\\nVDash ', -8882: u'\\vartriangleleft ', -8883: u'\\vartriangleright ', -8884: u'\\trianglelefteq ', -8885: u'\\trianglerighteq ', -8888: u'\\multimap ', -8890: u'\\intercal ', -8891: u'\\veebar ', -8892: u'\\barwedge ', -8896: u'\\bigwedge ', -8897: u'\\bigvee ', -8898: u'\\bigcap ', -8899: u'\\bigcup ', -8900: u'\\diamond ', -8901: u'\\cdot ', -8902: u'\\star ', -8903: u'\\divideontimes ', -8904: u'\\bowtie ', -8905: u'\\ltimes ', -8906: u'\\rtimes ', -8907: u'\\leftthreetimes ', -8908: u'\\rightthreetimes ', -8909: u'\\backsimeq ', -8910: u'\\curlyvee ', -8911: u'\\curlywedge ', -8912: u'\\Subset ', -8913: u'\\Supset ', -8914: u'\\Cap ', -8915: u'\\Cup ', -8916: u'\\pitchfork ', -8918: u'\\lessdot ', -8919: u'\\gtrdot ', -8920: u'\\lll ', -8921: u'\\ggg ', -8922: u'\\lesseqgtr ', -8923: u'\\gtreqless ', -8926: u'\\curlyeqprec ', -8927: u'\\curlyeqsucc ', -8928: u'\\npreceq ', -8929: u'\\nsucceq ', -8934: u'\\lnsim ', -8935: u'\\gnsim ', -8936: u'\\precnsim ', -8937: u'\\succnsim ', -8938: u'\\ntriangleleft ', -8939: u'\\ntriangleright ', -8940: u'\\ntrianglelefteq ', -8941: u'\\ntrianglerighteq ', -8942: u'\\vdots ', -8943: u'\\cdots ', -8945: u'\\ddots ', -8968: u'\\lceil ', -8969: u'\\rceil ', -8970: u'\\lfloor ', -8971: u'\\rfloor ', -8988: u'\\ulcorner ', -8989: u'\\urcorner ', -8990: u'\\llcorner ', -8991: u'\\lrcorner ', -8994: u'\\frown ', -8995: u'\\smile ', -9182: u'\\overbrace ', -9183: u'\\underbrace ', -9651: u'\\bigtriangleup ', -9655: u'\\rhd ', -9661: u'\\bigtriangledown ', -9665: u'\\lhd ', -9671: u'\\Diamond ', -9674: u'\\lozenge ', -9723: u'\\square ', -9724: u'\\blacksquare ', -9733: u'\\bigstar ', -9824: u'\\spadesuit ', -9825: u'\\heartsuit ', -9826: u'\\diamondsuit ', -9827: u'\\clubsuit ', -9837: u'\\flat ', -9838: u'\\natural ', -9839: u'\\sharp ', -10003: u'\\checkmark ', -10016: u'\\maltese ', -10178: u'\\perp ', -10216: u'\\langle ', -10217: u'\\rangle ', -10222: u'\\lgroup ', -10223: u'\\rgroup ', -10229: u'\\longleftarrow ', -10230: u'\\longrightarrow ', -10231: u'\\longleftrightarrow ', -10232: u'\\Longleftarrow ', -10233: u'\\Longrightarrow ', -10234: u'\\Longleftrightarrow ', -10236: u'\\longmapsto ', -10731: u'\\blacklozenge ', -10741: u'\\setminus ', -10752: u'\\bigodot ', -10753: u'\\bigoplus ', -10754: u'\\bigotimes ', -10756: u'\\biguplus ', -10758: u'\\bigsqcup ', -10764: u'\\iiiint ', -10781: u'\\Join ', -10815: u'\\amalg ', -10846: u'\\doublebarwedge ', -10877: u'\\leqslant ', -10878: u'\\geqslant ', -10885: u'\\lessapprox ', -10886: u'\\gtrapprox ', -10887: u'\\lneq ', -10888: u'\\gneq ', -10889: u'\\lnapprox ', -10890: u'\\gnapprox ', -10891: u'\\lesseqqgtr ', -10892: u'\\gtreqqless ', -10901: u'\\eqslantless ', -10902: u'\\eqslantgtr ', -10927: u'\\preceq ', -10928: u'\\succeq ', -10935: u'\\precapprox ', -10936: u'\\succapprox ', -10937: u'\\precnapprox ', -10938: u'\\succnapprox ', -10949: u'\\subseteqq ', -10950: u'\\supseteqq ', -10955: u'\\subsetneqq ', -10956: u'\\supsetneqq ', -119808: u'\\mathbf{A}', -119809: u'\\mathbf{B}', -119810: u'\\mathbf{C}', -119811: u'\\mathbf{D}', -119812: u'\\mathbf{E}', -119813: u'\\mathbf{F}', -119814: u'\\mathbf{G}', -119815: u'\\mathbf{H}', -119816: u'\\mathbf{I}', -119817: u'\\mathbf{J}', -119818: u'\\mathbf{K}', -119819: u'\\mathbf{L}', -119820: u'\\mathbf{M}', -119821: u'\\mathbf{N}', -119822: u'\\mathbf{O}', -119823: u'\\mathbf{P}', -119824: u'\\mathbf{Q}', -119825: u'\\mathbf{R}', -119826: u'\\mathbf{S}', -119827: u'\\mathbf{T}', -119828: u'\\mathbf{U}', -119829: u'\\mathbf{V}', -119830: u'\\mathbf{W}', -119831: u'\\mathbf{X}', -119832: u'\\mathbf{Y}', -119833: u'\\mathbf{Z}', -119834: u'\\mathbf{a}', -119835: u'\\mathbf{b}', -119836: u'\\mathbf{c}', -119837: u'\\mathbf{d}', -119838: u'\\mathbf{e}', -119839: u'\\mathbf{f}', -119840: u'\\mathbf{g}', -119841: u'\\mathbf{h}', -119842: u'\\mathbf{i}', -119843: u'\\mathbf{j}', -119844: u'\\mathbf{k}', -119845: u'\\mathbf{l}', -119846: u'\\mathbf{m}', -119847: u'\\mathbf{n}', -119848: u'\\mathbf{o}', -119849: u'\\mathbf{p}', -119850: u'\\mathbf{q}', -119851: u'\\mathbf{r}', -119852: u'\\mathbf{s}', -119853: u'\\mathbf{t}', -119854: u'\\mathbf{u}', -119855: u'\\mathbf{v}', -119856: u'\\mathbf{w}', -119857: u'\\mathbf{x}', -119858: u'\\mathbf{y}', -119859: u'\\mathbf{z}', -119860: u'A', -119861: u'B', -119862: u'C', -119863: u'D', -119864: u'E', -119865: u'F', -119866: u'G', -119867: u'H', -119868: u'I', -119869: u'J', -119870: u'K', -119871: u'L', -119872: u'M', -119873: u'N', -119874: u'O', -119875: u'P', -119876: u'Q', -119877: u'R', -119878: u'S', -119879: u'T', -119880: u'U', -119881: u'V', -119882: u'W', -119883: u'X', -119884: u'Y', -119885: u'Z', -119886: u'a', -119887: u'b', -119888: u'c', -119889: u'd', -119890: u'e', -119891: u'f', -119892: u'g', -119894: u'i', -119895: u'j', -119896: u'k', -119897: u'l', -119898: u'm', -119899: u'n', -119900: u'o', -119901: u'p', -119902: u'q', -119903: u'r', -119904: u's', -119905: u't', -119906: u'u', -119907: u'v', -119908: u'w', -119909: u'x', -119910: u'y', -119911: u'z', -119964: u'\\mathcal{A}', -119966: u'\\mathcal{C}', -119967: u'\\mathcal{D}', -119970: u'\\mathcal{G}', -119973: u'\\mathcal{J}', -119974: u'\\mathcal{K}', -119977: u'\\mathcal{N}', -119978: u'\\mathcal{O}', -119979: u'\\mathcal{P}', -119980: u'\\mathcal{Q}', -119982: u'\\mathcal{S}', -119983: u'\\mathcal{T}', -119984: u'\\mathcal{U}', -119985: u'\\mathcal{V}', -119986: u'\\mathcal{W}', -119987: u'\\mathcal{X}', -119988: u'\\mathcal{Y}', -119989: u'\\mathcal{Z}', -120068: u'\\mathfrak{A}', -120069: u'\\mathfrak{B}', -120071: u'\\mathfrak{D}', -120072: u'\\mathfrak{E}', -120073: u'\\mathfrak{F}', -120074: u'\\mathfrak{G}', -120077: u'\\mathfrak{J}', -120078: u'\\mathfrak{K}', -120079: u'\\mathfrak{L}', -120080: u'\\mathfrak{M}', -120081: u'\\mathfrak{N}', -120082: u'\\mathfrak{O}', -120083: u'\\mathfrak{P}', -120084: u'\\mathfrak{Q}', -120086: u'\\mathfrak{S}', -120087: u'\\mathfrak{T}', -120088: u'\\mathfrak{U}', -120089: u'\\mathfrak{V}', -120090: u'\\mathfrak{W}', -120091: u'\\mathfrak{X}', -120092: u'\\mathfrak{Y}', -120094: u'\\mathfrak{a}', -120095: u'\\mathfrak{b}', -120096: u'\\mathfrak{c}', -120097: u'\\mathfrak{d}', -120098: u'\\mathfrak{e}', -120099: u'\\mathfrak{f}', -120100: u'\\mathfrak{g}', -120101: u'\\mathfrak{h}', -120102: u'\\mathfrak{i}', -120103: u'\\mathfrak{j}', -120104: u'\\mathfrak{k}', -120105: u'\\mathfrak{l}', -120106: u'\\mathfrak{m}', -120107: u'\\mathfrak{n}', -120108: u'\\mathfrak{o}', -120109: u'\\mathfrak{p}', -120110: u'\\mathfrak{q}', -120111: u'\\mathfrak{r}', -120112: u'\\mathfrak{s}', -120113: u'\\mathfrak{t}', -120114: u'\\mathfrak{u}', -120115: u'\\mathfrak{v}', -120116: u'\\mathfrak{w}', -120117: u'\\mathfrak{x}', -120118: u'\\mathfrak{y}', -120119: u'\\mathfrak{z}', -120120: u'\\mathbb{A}', -120121: u'\\mathbb{B}', -120123: u'\\mathbb{D}', -120124: u'\\mathbb{E}', -120125: u'\\mathbb{F}', -120126: u'\\mathbb{G}', -120128: u'\\mathbb{I}', -120129: u'\\mathbb{J}', -120130: u'\\mathbb{K}', -120131: u'\\mathbb{L}', -120132: u'\\mathbb{M}', -120134: u'\\mathbb{O}', -120138: u'\\mathbb{S}', -120139: u'\\mathbb{T}', -120140: u'\\mathbb{U}', -120141: u'\\mathbb{V}', -120142: u'\\mathbb{W}', -120143: u'\\mathbb{X}', -120144: u'\\mathbb{Y}', -120156: u'\\Bbbk ', -120224: u'\\mathsf{A}', -120225: u'\\mathsf{B}', -120226: u'\\mathsf{C}', -120227: u'\\mathsf{D}', -120228: u'\\mathsf{E}', -120229: u'\\mathsf{F}', -120230: u'\\mathsf{G}', -120231: u'\\mathsf{H}', -120232: u'\\mathsf{I}', -120233: u'\\mathsf{J}', -120234: u'\\mathsf{K}', -120235: u'\\mathsf{L}', -120236: u'\\mathsf{M}', -120237: u'\\mathsf{N}', -120238: u'\\mathsf{O}', -120239: u'\\mathsf{P}', -120240: u'\\mathsf{Q}', -120241: u'\\mathsf{R}', -120242: u'\\mathsf{S}', -120243: u'\\mathsf{T}', -120244: u'\\mathsf{U}', -120245: u'\\mathsf{V}', -120246: u'\\mathsf{W}', -120247: u'\\mathsf{X}', -120248: u'\\mathsf{Y}', -120249: u'\\mathsf{Z}', -120250: u'\\mathsf{a}', -120251: u'\\mathsf{b}', -120252: u'\\mathsf{c}', -120253: u'\\mathsf{d}', -120254: u'\\mathsf{e}', -120255: u'\\mathsf{f}', -120256: u'\\mathsf{g}', -120257: u'\\mathsf{h}', -120258: u'\\mathsf{i}', -120259: u'\\mathsf{j}', -120260: u'\\mathsf{k}', -120261: u'\\mathsf{l}', -120262: u'\\mathsf{m}', -120263: u'\\mathsf{n}', -120264: u'\\mathsf{o}', -120265: u'\\mathsf{p}', -120266: u'\\mathsf{q}', -120267: u'\\mathsf{r}', -120268: u'\\mathsf{s}', -120269: u'\\mathsf{t}', -120270: u'\\mathsf{u}', -120271: u'\\mathsf{v}', -120272: u'\\mathsf{w}', -120273: u'\\mathsf{x}', -120274: u'\\mathsf{y}', -120275: u'\\mathsf{z}', -120432: u'\\mathtt{A}', -120433: u'\\mathtt{B}', -120434: u'\\mathtt{C}', -120435: u'\\mathtt{D}', -120436: u'\\mathtt{E}', -120437: u'\\mathtt{F}', -120438: u'\\mathtt{G}', -120439: u'\\mathtt{H}', -120440: u'\\mathtt{I}', -120441: u'\\mathtt{J}', -120442: u'\\mathtt{K}', -120443: u'\\mathtt{L}', -120444: u'\\mathtt{M}', -120445: u'\\mathtt{N}', -120446: u'\\mathtt{O}', -120447: u'\\mathtt{P}', -120448: u'\\mathtt{Q}', -120449: u'\\mathtt{R}', -120450: u'\\mathtt{S}', -120451: u'\\mathtt{T}', -120452: u'\\mathtt{U}', -120453: u'\\mathtt{V}', -120454: u'\\mathtt{W}', -120455: u'\\mathtt{X}', -120456: u'\\mathtt{Y}', -120457: u'\\mathtt{Z}', -120458: u'\\mathtt{a}', -120459: u'\\mathtt{b}', -120460: u'\\mathtt{c}', -120461: u'\\mathtt{d}', -120462: u'\\mathtt{e}', -120463: u'\\mathtt{f}', -120464: u'\\mathtt{g}', -120465: u'\\mathtt{h}', -120466: u'\\mathtt{i}', -120467: u'\\mathtt{j}', -120468: u'\\mathtt{k}', -120469: u'\\mathtt{l}', -120470: u'\\mathtt{m}', -120471: u'\\mathtt{n}', -120472: u'\\mathtt{o}', -120473: u'\\mathtt{p}', -120474: u'\\mathtt{q}', -120475: u'\\mathtt{r}', -120476: u'\\mathtt{s}', -120477: u'\\mathtt{t}', -120478: u'\\mathtt{u}', -120479: u'\\mathtt{v}', -120480: u'\\mathtt{w}', -120481: u'\\mathtt{x}', -120482: u'\\mathtt{y}', -120483: u'\\mathtt{z}', -120484: u'\\imath ', -120485: u'\\jmath ', -120490: u'\\mathbf{\\Gamma}', -120491: u'\\mathbf{\\Delta}', -120495: u'\\mathbf{\\Theta}', -120498: u'\\mathbf{\\Lambda}', -120501: u'\\mathbf{\\Xi}', -120503: u'\\mathbf{\\Pi}', -120506: u'\\mathbf{\\Sigma}', -120508: u'\\mathbf{\\Upsilon}', -120509: u'\\mathbf{\\Phi}', -120511: u'\\mathbf{\\Psi}', -120512: u'\\mathbf{\\Omega}', -120548: u'\\mathit{\\Gamma}', -120549: u'\\mathit{\\Delta}', -120553: u'\\mathit{\\Theta}', -120556: u'\\mathit{\\Lambda}', -120559: u'\\mathit{\\Xi}', -120561: u'\\mathit{\\Pi}', -120564: u'\\mathit{\\Sigma}', -120566: u'\\mathit{\\Upsilon}', -120567: u'\\mathit{\\Phi}', -120569: u'\\mathit{\\Psi}', -120570: u'\\mathit{\\Omega}', -120572: u'\\alpha ', -120573: u'\\beta ', -120574: u'\\gamma ', -120575: u'\\delta ', -120576: u'\\varepsilon ', -120577: u'\\zeta ', -120578: u'\\eta ', -120579: u'\\theta ', -120580: u'\\iota ', -120581: u'\\kappa ', -120582: u'\\lambda ', -120583: u'\\mu ', -120584: u'\\nu ', -120585: u'\\xi ', -120587: u'\\pi ', -120588: u'\\rho ', -120589: u'\\varsigma ', -120590: u'\\sigma ', -120591: u'\\tau ', -120592: u'\\upsilon ', -120593: u'\\varphi ', -120594: u'\\chi ', -120595: u'\\psi ', -120596: u'\\omega ', -120597: u'\\partial ', -120598: u'\\epsilon ', -120599: u'\\vartheta ', -120600: u'\\varkappa ', -120601: u'\\phi ', -120602: u'\\varrho ', -120603: u'\\varpi ', -120782: u'\\mathbf{0}', -120783: u'\\mathbf{1}', -120784: u'\\mathbf{2}', -120785: u'\\mathbf{3}', -120786: u'\\mathbf{4}', -120787: u'\\mathbf{5}', -120788: u'\\mathbf{6}', -120789: u'\\mathbf{7}', -120790: u'\\mathbf{8}', -120791: u'\\mathbf{9}', -120802: u'\\mathsf{0}', -120803: u'\\mathsf{1}', -120804: u'\\mathsf{2}', -120805: u'\\mathsf{3}', -120806: u'\\mathsf{4}', -120807: u'\\mathsf{5}', -120808: u'\\mathsf{6}', -120809: u'\\mathsf{7}', -120810: u'\\mathsf{8}', -120811: u'\\mathsf{9}', -120822: u'\\mathtt{0}', -120823: u'\\mathtt{1}', -120824: u'\\mathtt{2}', -120825: u'\\mathtt{3}', -120826: u'\\mathtt{4}', -120827: u'\\mathtt{5}', -120828: u'\\mathtt{6}', -120829: u'\\mathtt{7}', -120830: u'\\mathtt{8}', -120831: u'\\mathtt{9}', -} diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/punctuation_chars.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/punctuation_chars.py deleted file mode 100644 index 041cf9c..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/punctuation_chars.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# :Id: $Id: punctuation_chars.py 8016 2017-01-17 15:06:17Z milde $ -# :Copyright: © 2011, 2017 Günter Milde. -# :License: Released under the terms of the `2-Clause BSD license`_, in short: -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause -# -# This file is generated by -# ``docutils/tools/dev/generate_punctuation_chars.py``. -# :: - -import sys, re -import unicodedata - -"""Docutils character category patterns. - - Patterns for the implementation of the `inline markup recognition rules`_ - in the reStructuredText parser `docutils.parsers.rst.states.py` based - on Unicode character categories. - The patterns are used inside ``[ ]`` in regular expressions. - - Rule (5) requires determination of matching open/close pairs. However, the - pairing of open/close quotes is ambiguous due to different typographic - conventions in different languages. The ``quote_pairs`` function tests - whether two characters form an open/close pair. - - The patterns are generated by - ``docutils/tools/dev/generate_punctuation_chars.py`` to prevent dependence - on the Python version and avoid the time-consuming generation with every - Docutils run. See there for motives and implementation details. - - The category of some characters changed with the development of the - Unicode standard. The current lists are generated with the help of the - "unicodedata" module of Python 2.7.13 (based on Unicode version 5.2.0). - - .. _inline markup recognition rules: - http://docutils.sf.net/docs/ref/rst/restructuredtext.html#inline-markup-recognition-rules -""" - -openers = (u'"\'(<\\[{\u0f3a\u0f3c\u169b\u2045\u207d\u208d\u2329\u2768' - u'\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea' - u'\u27ec\u27ee\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991' - u'\u2993\u2995\u2997\u29d8\u29da\u29fc\u2e22\u2e24\u2e26\u2e28' - u'\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d' - u'\u301d\ufd3e\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41' - u'\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62' - u'\xab\u2018\u201c\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c\u2e20' - u'\u201a\u201e\xbb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d' - u'\u2e1d\u2e21\u201b\u201f') -closers = (u'"\')>\\]}\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u232a\u2769' - u'\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb' - u'\u27ed\u27ef\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992' - u'\u2994\u2996\u2998\u29d9\u29db\u29fd\u2e23\u2e25\u2e27\u2e29' - u'\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e' - u'\u301f\ufd3f\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42' - u'\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63' - u'\xbb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d\u2e21' - u'\u201b\u201f\xab\u2018\u201c\u2039\u2e02\u2e04\u2e09\u2e0c' - u'\u2e1c\u2e20\u201a\u201e') -delimiters = (u'\\-/:\u058a\xa1\xb7\xbf\u037e\u0387\u055a-\u055f\u0589' - u'\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c' - u'\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d' - u'\u07f7-\u07f9\u0830-\u083e\u0964\u0965\u0970\u0df4\u0e4f' - u'\u0e5a\u0e5b\u0f04-\u0f12\u0f85\u0fd0-\u0fd4\u104a-\u104f' - u'\u10fb\u1361-\u1368\u1400\u166d\u166e\u16eb-\u16ed\u1735' - u'\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945' - u'\u19de\u19df\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-' - u'\u1b60\u1c3b-\u1c3f\u1c7e\u1c7f\u1cd3\u2010-\u2017\u2020-' - u'\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-' - u'\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2e00' - u'\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e1b\u2e1e\u2e1f\u2e2a-' - u'\u2e2e\u2e30\u2e31\u3001-\u3003\u301c\u3030\u303d\u30a0' - u'\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7' - u'\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f' - u'\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uabeb' - u'\ufe10-\ufe16\ufe19\ufe30-\ufe32\ufe45\ufe46\ufe49-\ufe4c' - u'\ufe50-\ufe52\ufe54-\ufe58\ufe5f-\ufe61\ufe63\ufe68\ufe6a' - u'\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c-\uff0f\uff1a' - u'\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65') -if sys.maxunicode >= 0x10FFFF: # "wide" build - delimiters += (u'\U00010100\U00010101\U0001039f\U000103d0\U00010857' - u'\U0001091f\U0001093f\U00010a50-\U00010a58\U00010a7f' - u'\U00010b39-\U00010b3f\U000110bb\U000110bc\U000110be-' - u'\U000110c1\U00012470-\U00012473') -closing_delimiters = u'\\\\.,;!?' - - -# Matching open/close quotes -# -------------------------- - -quote_pairs = {# open char: matching closing characters # usage example - u'\xbb': u'\xbb', # » » Swedish - u'\u2018': u'\u201a', # ‘ ‚ Albanian/Greek/Turkish - u'\u2019': u'\u2019', # ’ ’ Swedish - u'\u201a': u'\u2018\u2019', # ‚ ‘ German ‚ ’ Polish - u'\u201c': u'\u201e', # “ „ Albanian/Greek/Turkish - u'\u201e': u'\u201c\u201d', # „ “ German „ ” Polish - u'\u201d': u'\u201d', # ” ” Swedish - u'\u203a': u'\u203a', # › › Swedish - } -"""Additional open/close quote pairs.""" - -def match_chars(c1, c2): - """Test whether `c1` and `c2` are a matching open/close character pair. - - Matching open/close pairs are at the same position in - `punctuation_chars.openers` and `punctuation_chars.closers`. - The pairing of open/close quotes is ambiguous due to different - typographic conventions in different languages, - so we test for additional matches stored in `quote_pairs`. - """ - try: - i = openers.index(c1) - except ValueError: # c1 not in openers - return False - return c2 == closers[i] or c2 in quote_pairs.get(c1, u'') diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/roman.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/roman.py deleted file mode 100644 index dce927f..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/roman.py +++ /dev/null @@ -1,82 +0,0 @@ -"""Convert to and from Roman numerals""" - -__author__ = "Mark Pilgrim (f8dy@diveintopython.org)" -__version__ = "1.4" -__date__ = "8 August 2001" -__copyright__ = """Copyright (c) 2001 Mark Pilgrim - -This program is part of "Dive Into Python", a free Python tutorial for -experienced programmers. Visit http://diveintopython.org/ for the -latest version. - -This program is free software; you can redistribute it and/or modify -it under the terms of the Python 2.1.1 license, available at -http://www.python.org/2.1.1/license.html -""" - -import re - -#Define exceptions -class RomanError(Exception): pass -class OutOfRangeError(RomanError): pass -class NotIntegerError(RomanError): pass -class InvalidRomanNumeralError(RomanError): pass - -#Define digit mapping -romanNumeralMap = (('M', 1000), - ('CM', 900), - ('D', 500), - ('CD', 400), - ('C', 100), - ('XC', 90), - ('L', 50), - ('XL', 40), - ('X', 10), - ('IX', 9), - ('V', 5), - ('IV', 4), - ('I', 1)) - -def toRoman(n): - """convert integer to Roman numeral""" - if not (0 < n < 5000): - raise OutOfRangeError("number out of range (must be 1..4999)") - if int(n) != n: - raise NotIntegerError("decimals can not be converted") - - result = "" - for numeral, integer in romanNumeralMap: - while n >= integer: - result += numeral - n -= integer - return result - -#Define pattern to detect valid Roman numerals -romanNumeralPattern = re.compile(""" - ^ # beginning of string - M{0,4} # thousands - 0 to 4 M's - (CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's), - # or 500-800 (D, followed by 0 to 3 C's) - (XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's), - # or 50-80 (L, followed by 0 to 3 X's) - (IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's), - # or 5-8 (V, followed by 0 to 3 I's) - $ # end of string - """, re.VERBOSE) - -def fromRoman(s): - """convert Roman numeral to integer""" - if not s: - raise InvalidRomanNumeralError('Input can not be blank') - - if not romanNumeralPattern.search(s): - raise InvalidRomanNumeralError('Invalid Roman numeral: %s' % s) - - result = 0 - index = 0 - for numeral, integer in romanNumeralMap: - while s[index:index+len(numeral)] == numeral: - result += integer - index += len(numeral) - return result - diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/smartquotes.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/smartquotes.py deleted file mode 100644 index 518ae09..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/smartquotes.py +++ /dev/null @@ -1,1014 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# :Id: $Id: smartquotes.py 8376 2019-08-27 19:49:29Z milde $ -# :Copyright: © 2010 Günter Milde, -# original `SmartyPants`_: © 2003 John Gruber -# smartypants.py: © 2004, 2007 Chad Miller -# :Maintainer: docutils-develop@lists.sourceforge.net -# :License: Released under the terms of the `2-Clause BSD license`_, in short: -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notices and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause - - -r""" -========================= -Smart Quotes for Docutils -========================= - -Synopsis -======== - -"SmartyPants" is a free web publishing plug-in for Movable Type, Blosxom, and -BBEdit that easily translates plain ASCII punctuation characters into "smart" -typographic punctuation characters. - -``smartquotes.py`` is an adaption of "SmartyPants" to Docutils_. - -* Using Unicode instead of HTML entities for typographic punctuation - characters, it works for any output format that supports Unicode. -* Supports `language specific quote characters`__. - -__ http://en.wikipedia.org/wiki/Non-English_usage_of_quotation_marks - - -Authors -======= - -`John Gruber`_ did all of the hard work of writing this software in Perl for -`Movable Type`_ and almost all of this useful documentation. `Chad Miller`_ -ported it to Python to use with Pyblosxom_. -Adapted to Docutils_ by Günter Milde. - -Additional Credits -================== - -Portions of the SmartyPants original work are based on Brad Choate's nifty -MTRegex plug-in. `Brad Choate`_ also contributed a few bits of source code to -this plug-in. Brad Choate is a fine hacker indeed. - -`Jeremy Hedley`_ and `Charles Wiltgen`_ deserve mention for exemplary beta -testing of the original SmartyPants. - -`Rael Dornfest`_ ported SmartyPants to Blosxom. - -.. _Brad Choate: http://bradchoate.com/ -.. _Jeremy Hedley: http://antipixel.com/ -.. _Charles Wiltgen: http://playbacktime.com/ -.. _Rael Dornfest: http://raelity.org/ - - -Copyright and License -===================== - -SmartyPants_ license (3-Clause BSD license): - - Copyright (c) 2003 John Gruber (http://daringfireball.net/) - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name "SmartyPants" nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - This software is provided by the copyright holders and contributors - "as is" and any express or implied warranties, including, but not - limited to, the implied warranties of merchantability and fitness for - a particular purpose are disclaimed. In no event shall the copyright - owner or contributors be liable for any direct, indirect, incidental, - special, exemplary, or consequential damages (including, but not - limited to, procurement of substitute goods or services; loss of use, - data, or profits; or business interruption) however caused and on any - theory of liability, whether in contract, strict liability, or tort - (including negligence or otherwise) arising in any way out of the use - of this software, even if advised of the possibility of such damage. - -smartypants.py license (2-Clause BSD license): - - smartypants.py is a derivative work of SmartyPants. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - This software is provided by the copyright holders and contributors - "as is" and any express or implied warranties, including, but not - limited to, the implied warranties of merchantability and fitness for - a particular purpose are disclaimed. In no event shall the copyright - owner or contributors be liable for any direct, indirect, incidental, - special, exemplary, or consequential damages (including, but not - limited to, procurement of substitute goods or services; loss of use, - data, or profits; or business interruption) however caused and on any - theory of liability, whether in contract, strict liability, or tort - (including negligence or otherwise) arising in any way out of the use - of this software, even if advised of the possibility of such damage. - -.. _John Gruber: http://daringfireball.net/ -.. _Chad Miller: http://web.chad.org/ - -.. _Pyblosxom: http://pyblosxom.bluesock.org/ -.. _SmartyPants: http://daringfireball.net/projects/smartypants/ -.. _Movable Type: http://www.movabletype.org/ -.. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause -.. _Docutils: http://docutils.sf.net/ - -Description -=========== - -SmartyPants can perform the following transformations: - -- Straight quotes ( " and ' ) into "curly" quote characters -- Backticks-style quotes (\`\`like this'') into "curly" quote characters -- Dashes (``--`` and ``---``) into en- and em-dash entities -- Three consecutive dots (``...`` or ``. . .``) into an ellipsis entity - -This means you can write, edit, and save your posts using plain old -ASCII straight quotes, plain dashes, and plain dots, but your published -posts (and final HTML output) will appear with smart quotes, em-dashes, -and proper ellipses. - -SmartyPants does not modify characters within ``<pre>``, ``<code>``, ``<kbd>``, -``<math>`` or ``<script>`` tag blocks. Typically, these tags are used to -display text where smart quotes and other "smart punctuation" would not be -appropriate, such as source code or example markup. - - -Backslash Escapes -================= - -If you need to use literal straight quotes (or plain hyphens and periods), -`smartquotes` accepts the following backslash escape sequences to force -ASCII-punctuation. Mind, that you need two backslashes as Docutils expands it, -too. - -======== ========= -Escape Character -======== ========= -``\\`` \\ -``\\"`` \\" -``\\'`` \\' -``\\.`` \\. -``\\-`` \\- -``\\``` \\` -======== ========= - -This is useful, for example, when you want to use straight quotes as -foot and inch marks: 6\\'2\\" tall; a 17\\" iMac. - - -Caveats -======= - -Why You Might Not Want to Use Smart Quotes in Your Weblog ---------------------------------------------------------- - -For one thing, you might not care. - -Most normal, mentally stable individuals do not take notice of proper -typographic punctuation. Many design and typography nerds, however, break -out in a nasty rash when they encounter, say, a restaurant sign that uses -a straight apostrophe to spell "Joe's". - -If you're the sort of person who just doesn't care, you might well want to -continue not caring. Using straight quotes -- and sticking to the 7-bit -ASCII character set in general -- is certainly a simpler way to live. - -Even if you *do* care about accurate typography, you still might want to -think twice before educating the quote characters in your weblog. One side -effect of publishing curly quote characters is that it makes your -weblog a bit harder for others to quote from using copy-and-paste. What -happens is that when someone copies text from your blog, the copied text -contains the 8-bit curly quote characters (as well as the 8-bit characters -for em-dashes and ellipses, if you use these options). These characters -are not standard across different text encoding methods, which is why they -need to be encoded as characters. - -People copying text from your weblog, however, may not notice that you're -using curly quotes, and they'll go ahead and paste the unencoded 8-bit -characters copied from their browser into an email message or their own -weblog. When pasted as raw "smart quotes", these characters are likely to -get mangled beyond recognition. - -That said, my own opinion is that any decent text editor or email client -makes it easy to stupefy smart quote characters into their 7-bit -equivalents, and I don't consider it my problem if you're using an -indecent text editor or email client. - - -Algorithmic Shortcomings ------------------------- - -One situation in which quotes will get curled the wrong way is when -apostrophes are used at the start of leading contractions. For example:: - - 'Twas the night before Christmas. - -In the case above, SmartyPants will turn the apostrophe into an opening -single-quote, when in fact it should be the `right single quotation mark` -character which is also "the preferred character to use for apostrophe" -(Unicode). I don't think this problem can be solved in the general case -- -every word processor I've tried gets this wrong as well. In such cases, it's -best to use the proper character for closing single-quotes (’) by hand. - -In English, the same character is used for apostrophe and closing single -quote (both plain and "smart" ones). For other locales (French, Italean, -Swiss, ...) "smart" single closing quotes differ from the curly apostrophe. - - .. class:: language-fr - - Il dit : "C'est 'super' !" - -If the apostrophe is used at the end of a word, it cannot be distinguished -from a single quote by the algorithm. Therefore, a text like:: - - .. class:: language-de-CH - - "Er sagt: 'Ich fass' es nicht.'" - -will get a single closing guillemet instead of an apostrophe. - -This can be prevented by use use of the curly apostrophe character (’) in -the source:: - - - "Er sagt: 'Ich fass' es nicht.'" - + "Er sagt: 'Ich fass’ es nicht.'" - - -Version History -=============== - -1.8.1 2017-10-25 - - Use open quote after Unicode whitespace, ZWSP, and ZWNJ. - - Code cleanup. - -1.8: 2017-04-24 - - Command line front-end. - -1.7.1: 2017-03-19 - - Update and extend language-dependent quotes. - - Differentiate apostrophe from single quote. - -1.7: 2012-11-19 - - Internationalization: language-dependent quotes. - -1.6.1: 2012-11-06 - - Refactor code, code cleanup, - - `educate_tokens()` generator as interface for Docutils. - -1.6: 2010-08-26 - - Adaption to Docutils: - - Use Unicode instead of HTML entities, - - Remove code special to pyblosxom. - -1.5_1.6: Fri, 27 Jul 2007 07:06:40 -0400 - - Fixed bug where blocks of precious unalterable text was instead - interpreted. Thanks to Le Roux and Dirk van Oosterbosch. - -1.5_1.5: Sat, 13 Aug 2005 15:50:24 -0400 - - Fix bogus magical quotation when there is no hint that the - user wants it, e.g., in "21st century". Thanks to Nathan Hamblen. - - Be smarter about quotes before terminating numbers in an en-dash'ed - range. - -1.5_1.4: Thu, 10 Feb 2005 20:24:36 -0500 - - Fix a date-processing bug, as reported by jacob childress. - - Begin a test-suite for ensuring correct output. - - Removed import of "string", since I didn't really need it. - (This was my first every Python program. Sue me!) - -1.5_1.3: Wed, 15 Sep 2004 18:25:58 -0400 - - Abort processing if the flavour is in forbidden-list. Default of - [ "rss" ] (Idea of Wolfgang SCHNERRING.) - - Remove stray virgules from en-dashes. Patch by Wolfgang SCHNERRING. - -1.5_1.2: Mon, 24 May 2004 08:14:54 -0400 - - Some single quotes weren't replaced properly. Diff-tesuji played - by Benjamin GEIGER. - -1.5_1.1: Sun, 14 Mar 2004 14:38:28 -0500 - - Support upcoming pyblosxom 0.9 plugin verification feature. - -1.5_1.0: Tue, 09 Mar 2004 08:08:35 -0500 - - Initial release -""" -from __future__ import print_function - -options = r""" -Options -======= - -Numeric values are the easiest way to configure SmartyPants' behavior: - -:0: Suppress all transformations. (Do nothing.) - -:1: Performs default SmartyPants transformations: quotes (including - \`\`backticks'' -style), em-dashes, and ellipses. "``--``" (dash dash) - is used to signify an em-dash; there is no support for en-dashes - -:2: Same as smarty_pants="1", except that it uses the old-school typewriter - shorthand for dashes: "``--``" (dash dash) for en-dashes, "``---``" - (dash dash dash) - for em-dashes. - -:3: Same as smarty_pants="2", but inverts the shorthand for dashes: - "``--``" (dash dash) for em-dashes, and "``---``" (dash dash dash) for - en-dashes. - -:-1: Stupefy mode. Reverses the SmartyPants transformation process, turning - the characters produced by SmartyPants into their ASCII equivalents. - E.g. the LEFT DOUBLE QUOTATION MARK (“) is turned into a simple - double-quote (\"), "—" is turned into two dashes, etc. - - -The following single-character attribute values can be combined to toggle -individual transformations from within the smarty_pants attribute. For -example, ``"1"`` is equivalent to ``"qBde"``. - -:q: Educates normal quote characters: (") and ('). - -:b: Educates \`\`backticks'' -style double quotes. - -:B: Educates \`\`backticks'' -style double quotes and \`single' quotes. - -:d: Educates em-dashes. - -:D: Educates em-dashes and en-dashes, using old-school typewriter shorthand: - (dash dash) for en-dashes, (dash dash dash) for em-dashes. - -:i: Educates em-dashes and en-dashes, using inverted old-school typewriter - shorthand: (dash dash) for em-dashes, (dash dash dash) for en-dashes. - -:e: Educates ellipses. - -:w: Translates any instance of ``"`` into a normal double-quote character. - This should be of no interest to most people, but of particular interest - to anyone who writes their posts using Dreamweaver, as Dreamweaver - inexplicably uses this entity to represent a literal double-quote - character. SmartyPants only educates normal quotes, not entities (because - ordinarily, entities are used for the explicit purpose of representing the - specific character they represent). The "w" option must be used in - conjunction with one (or both) of the other quote options ("q" or "b"). - Thus, if you wish to apply all SmartyPants transformations (quotes, en- - and em-dashes, and ellipses) and also translate ``"`` entities into - regular quotes so SmartyPants can educate them, you should pass the - following to the smarty_pants attribute: -""" - - -default_smartypants_attr = "1" - - -import re, sys - -class smartchars(object): - """Smart quotes and dashes - """ - - endash = u'–' # "–" EN DASH - emdash = u'—' # "—" EM DASH - ellipsis = u'…' # "…" HORIZONTAL ELLIPSIS - apostrophe = u'’' # "’" RIGHT SINGLE QUOTATION MARK - - # quote characters (language-specific, set in __init__()) - # [1] http://en.wikipedia.org/wiki/Non-English_usage_of_quotation_marks - # [2] http://de.wikipedia.org/wiki/Anf%C3%BChrungszeichen#Andere_Sprachen - # [3] https://fr.wikipedia.org/wiki/Guillemet - # [4] http://typographisme.net/post/Les-espaces-typographiques-et-le-web - # [5] http://www.btb.termiumplus.gc.ca/tpv2guides/guides/redac/index-fra.html - # [6] https://en.wikipedia.org/wiki/Hebrew_punctuation#Quotation_marks - # [7] http://www.tustep.uni-tuebingen.de/bi/bi00/bi001t1-anfuehrung.pdf - # [8] http://www.korrekturavdelingen.no/anforselstegn.htm - # [9] Typografisk håndbok. Oslo: Spartacus. 2000. s. 67. ISBN 8243001530. - # [10] http://www.typografi.org/sitat/sitatart.html - # - # See also configuration option "smartquote-locales". - quotes = {'af': u'“”‘’', - 'af-x-altquot': u'„”‚’', - 'bg': u'„“‚‘', # Bulgarian, https://bg.wikipedia.org/wiki/Кавички - 'ca': u'«»“”', - 'ca-x-altquot': u'“”‘’', - 'cs': u'„“‚‘', - 'cs-x-altquot': u'»«›‹', - 'da': u'»«›‹', - 'da-x-altquot': u'„“‚‘', - # 'da-x-altquot2': u'””’’', - 'de': u'„“‚‘', - 'de-x-altquot': u'»«›‹', - 'de-ch': u'«»‹›', - 'el': u'«»“”', - 'en': u'“”‘’', - 'en-uk-x-altquot': u'‘’“”', # Attention: " → ‘ and ' → “ ! - 'eo': u'“”‘’', - 'es': u'«»“”', - 'es-x-altquot': u'“”‘’', - 'et': u'„“‚‘', # no secondary quote listed in - 'et-x-altquot': u'«»‹›', # the sources above (wikipedia.org) - 'eu': u'«»‹›', - 'fi': u'””’’', - 'fi-x-altquot': u'»»››', - 'fr': (u'« ', u' »', u'“', u'”'), # full no-break space - 'fr-x-altquot': (u'« ', u' »', u'“', u'”'), # narrow no-break space - 'fr-ch': u'«»‹›', - 'fr-ch-x-altquot': (u'« ', u' »', u'‹ ', u' ›'), # narrow no-break space, http://typoguide.ch/ - 'gl': u'«»“”', - 'he': u'”“»«', # Hebrew is RTL, test position: - 'he-x-altquot': u'„”‚’', # low quotation marks are opening. - # 'he-x-altquot': u'“„‘‚', # RTL: low quotation marks opening - 'hr': u'„”‘’', # http://hrvatska-tipografija.com/polunavodnici/ - 'hr-x-altquot': u'»«›‹', - 'hsb': u'„“‚‘', - 'hsb-x-altquot': u'»«›‹', - 'hu': u'„”«»', - 'is': u'„“‚‘', - 'it': u'«»“”', - 'it-ch': u'«»‹›', - 'it-x-altquot': u'“”‘’', - # 'it-x-altquot2': u'“„‘‚', # [7] in headlines - 'ja': u'「」『』', - 'ko': u'《》〈〉', - 'lt': u'„“‚‘', - 'lv': u'„“‚‘', - 'mk': u'„“‚‘', # Macedonian, https://mk.wikipedia.org/wiki/Правопис_и_правоговор_на_македонскиот_јазик - 'nl': u'“”‘’', - 'nl-x-altquot': u'„”‚’', - # 'nl-x-altquot2': u'””’’', - 'nb': u'«»’’', # Norsk bokmål (canonical form 'no') - 'nn': u'«»’’', # Nynorsk [10] - 'nn-x-altquot': u'«»‘’', # [8], [10] - # 'nn-x-altquot2': u'«»«»', # [9], [10 - # 'nn-x-altquot3': u'„“‚‘', # [10] - 'no': u'«»’’', # Norsk bokmål [10] - 'no-x-altquot': u'«»‘’', # [8], [10] - # 'no-x-altquot2': u'«»«»', # [9], [10 - # 'no-x-altquot3': u'„“‚‘', # [10] - 'pl': u'„”«»', - 'pl-x-altquot': u'«»‚’', - # 'pl-x-altquot2': u'„”‚’', # https://pl.wikipedia.org/wiki/Cudzys%C5%82%C3%B3w - 'pt': u'«»“”', - 'pt-br': u'“”‘’', - 'ro': u'„”«»', - 'ru': u'«»„“', - 'sh': u'„”‚’', # Serbo-Croatian - 'sh-x-altquot': u'»«›‹', - 'sk': u'„“‚‘', # Slovak - 'sk-x-altquot': u'»«›‹', - 'sl': u'„“‚‘', # Slovenian - 'sl-x-altquot': u'»«›‹', - 'sq': u'«»‹›', # Albanian - 'sq-x-altquot': u'“„‘‚', - 'sr': u'„”’’', - 'sr-x-altquot': u'»«›‹', - 'sv': u'””’’', - 'sv-x-altquot': u'»»››', - 'tr': u'“”‘’', - 'tr-x-altquot': u'«»‹›', - # 'tr-x-altquot2': u'“„‘‚', # [7] antiquated? - 'uk': u'«»„“', - 'uk-x-altquot': u'„“‚‘', - 'zh-cn': u'“”‘’', - 'zh-tw': u'「」『』', - } - - def __init__(self, language='en'): - self.language = language - try: - (self.opquote, self.cpquote, - self.osquote, self.csquote) = self.quotes[language.lower()] - except KeyError: - self.opquote, self.cpquote, self.osquote, self.csquote = u'""\'\'' - - -def smartyPants(text, attr=default_smartypants_attr, language='en'): - """Main function for "traditional" use.""" - - return "".join([t for t in educate_tokens(tokenize(text), - attr, language)]) - - -def educate_tokens(text_tokens, attr=default_smartypants_attr, language='en'): - """Return iterator that "educates" the items of `text_tokens`. - """ - - # Parse attributes: - # 0 : do nothing - # 1 : set all - # 2 : set all, using old school en- and em- dash shortcuts - # 3 : set all, using inverted old school en and em- dash shortcuts - # - # q : quotes - # b : backtick quotes (``double'' only) - # B : backtick quotes (``double'' and `single') - # d : dashes - # D : old school dashes - # i : inverted old school dashes - # e : ellipses - # w : convert " entities to " for Dreamweaver users - - convert_quot = False # translate " entities into normal quotes? - do_dashes = False - do_backticks = False - do_quotes = False - do_ellipses = False - do_stupefy = False - - # if attr == "0": # pass tokens unchanged (see below). - if attr == "1": # Do everything, turn all options on. - do_quotes = True - do_backticks = True - do_dashes = 1 - do_ellipses = True - elif attr == "2": - # Do everything, turn all options on, use old school dash shorthand. - do_quotes = True - do_backticks = True - do_dashes = 2 - do_ellipses = True - elif attr == "3": - # Do everything, use inverted old school dash shorthand. - do_quotes = True - do_backticks = True - do_dashes = 3 - do_ellipses = True - elif attr == "-1": # Special "stupefy" mode. - do_stupefy = True - else: - if "q" in attr: do_quotes = True - if "b" in attr: do_backticks = True - if "B" in attr: do_backticks = 2 - if "d" in attr: do_dashes = 1 - if "D" in attr: do_dashes = 2 - if "i" in attr: do_dashes = 3 - if "e" in attr: do_ellipses = True - if "w" in attr: convert_quot = True - - prev_token_last_char = " " - # Last character of the previous text token. Used as - # context to curl leading quote characters correctly. - - for (ttype, text) in text_tokens: - - # skip HTML and/or XML tags as well as emtpy text tokens - # without updating the last character - if ttype == 'tag' or not text: - yield text - continue - - # skip literal text (math, literal, raw, ...) - if ttype == 'literal': - prev_token_last_char = text[-1:] - yield text - continue - - last_char = text[-1:] # Remember last char before processing. - - text = processEscapes(text) - - if convert_quot: - text = re.sub('"', '"', text) - - if do_dashes == 1: - text = educateDashes(text) - elif do_dashes == 2: - text = educateDashesOldSchool(text) - elif do_dashes == 3: - text = educateDashesOldSchoolInverted(text) - - if do_ellipses: - text = educateEllipses(text) - - # Note: backticks need to be processed before quotes. - if do_backticks: - text = educateBackticks(text, language) - - if do_backticks == 2: - text = educateSingleBackticks(text, language) - - if do_quotes: - # Replace plain quotes in context to prevent converstion to - # 2-character sequence in French. - context = prev_token_last_char.replace('"', ';').replace("'", ';') - text = educateQuotes(context+text, language)[1:] - - if do_stupefy: - text = stupefyEntities(text, language) - - # Remember last char as context for the next token - prev_token_last_char = last_char - - text = processEscapes(text, restore=True) - - yield text - - - -def educateQuotes(text, language='en'): - """ - Parameter: - text string (unicode or bytes). - - language (`BCP 47` language tag.) - Returns: The `text`, with "educated" curly quote characters. - - Example input: "Isn't this fun?" - Example output: “Isn’t this fun?“; - """ - - smart = smartchars(language) - - punct_class = r"""[!"#\$\%'()*+,-.\/:;<=>?\@\[\\\]\^_`{|}~]""" - close_class = r"""[^\ \t\r\n\[\{\(\-]""" - open_class = u'[\u200B\u200C]' # ZWSP, ZWNJ - dec_dashes = r"""–|—""" - - # Special case if the very first character is a quote - # followed by punctuation at a non-word-break. - # Close the quotes by brute force: - text = re.sub(r"^'(?=%s\\B)" % (punct_class,), smart.csquote, text) - text = re.sub(r'^"(?=%s\\B)' % (punct_class,), smart.cpquote, text) - - # Special case for double sets of quotes, e.g.: - # <p>He said, "'Quoted' words in a larger quote."</p> - text = re.sub(r""""'(?=\w)""", smart.opquote+smart.osquote, text) - text = re.sub(r"""'"(?=\w)""", smart.osquote+smart.opquote, text) - - # Special case for decade abbreviations (the '80s): - if language.startswith('en'): # TODO similar cases in other languages? - text = re.sub(r"'(?=\d{2}s)", smart.apostrophe, text) - - # Get most opening single quotes: - opening_single_quotes_regex = re.compile(u""" - (# ?<= # look behind fails: requires fixed-width pattern - \\s | # a whitespace char, or - %s | # another separating char, or -   | # a non-breaking space entity, or - [\u2013 \u2014 ] | # literal dashes, or - -- | # dumb dashes, or - &[mn]dash; | # dash entities (named or - %s | # decimal or - &\\#x201[34]; # hex) - ) - ' # the quote - (?=\\w) # followed by a word character - """ % (open_class, dec_dashes), re.VERBOSE | re.UNICODE) - - text = opening_single_quotes_regex.sub(r'\1'+smart.osquote, text) - - # In many locales, single closing quotes are different from apostrophe: - if smart.csquote != smart.apostrophe: - apostrophe_regex = re.compile(r"(?<=(\w|\d))'(?=\w)", re.UNICODE) - text = apostrophe_regex.sub(smart.apostrophe, text) - # TODO: keep track of quoting level to recognize apostrophe in, e.g., - # "Ich fass' es nicht." - - closing_single_quotes_regex = re.compile(r""" - (?<=%s) - ' - """ % close_class, re.VERBOSE) - text = closing_single_quotes_regex.sub(smart.csquote, text) - - # Any remaining single quotes should be opening ones: - text = re.sub(r"""'""", smart.osquote, text) - - # Get most opening double quotes: - opening_double_quotes_regex = re.compile(u""" - ( - \\s | # a whitespace char, or - %s | # another separating char, or -   | # a non-breaking space entity, or - [\u2013 \u2014 ] | # literal dashes, or - -- | # dumb dashes, or - &[mn]dash; | # dash entities (named or - %s | # decimal or - &\\#x201[34]; # hex) - ) - " # the quote - (?=\\w) # followed by a word character - """ % (open_class, dec_dashes), re.VERBOSE | re.UNICODE) - - text = opening_double_quotes_regex.sub(r'\1'+smart.opquote, text) - - # Double closing quotes: - closing_double_quotes_regex = re.compile(r""" - ( - (?<=%s)" | # char indicating the quote should be closing - "(?=\s) # whitespace behind - ) - """ % (close_class,), re.VERBOSE | re.UNICODE) - text = closing_double_quotes_regex.sub(smart.cpquote, text) - - # Any remaining quotes should be opening ones. - text = re.sub(r'"', smart.opquote, text) - - return text - - -def educateBackticks(text, language='en'): - """ - Parameter: String (unicode or bytes). - Returns: The `text`, with ``backticks'' -style double quotes - translated into HTML curly quote entities. - Example input: ``Isn't this fun?'' - Example output: “Isn't this fun?“; - """ - smart = smartchars(language) - - text = re.sub(r"""``""", smart.opquote, text) - text = re.sub(r"""''""", smart.cpquote, text) - return text - - -def educateSingleBackticks(text, language='en'): - """ - Parameter: String (unicode or bytes). - Returns: The `text`, with `backticks' -style single quotes - translated into HTML curly quote entities. - - Example input: `Isn't this fun?' - Example output: ‘Isn’t this fun?’ - """ - smart = smartchars(language) - - text = re.sub(r"""`""", smart.osquote, text) - text = re.sub(r"""'""", smart.csquote, text) - return text - - -def educateDashes(text): - """ - Parameter: String (unicode or bytes). - Returns: The `text`, with each instance of "--" translated to - an em-dash character. - """ - - text = re.sub(r"""---""", smartchars.endash, text) # en (yes, backwards) - text = re.sub(r"""--""", smartchars.emdash, text) # em (yes, backwards) - return text - - -def educateDashesOldSchool(text): - """ - Parameter: String (unicode or bytes). - Returns: The `text`, with each instance of "--" translated to - an en-dash character, and each "---" translated to - an em-dash character. - """ - - text = re.sub(r"""---""", smartchars.emdash, text) - text = re.sub(r"""--""", smartchars.endash, text) - return text - - -def educateDashesOldSchoolInverted(text): - """ - Parameter: String (unicode or bytes). - Returns: The `text`, with each instance of "--" translated to - an em-dash character, and each "---" translated to - an en-dash character. Two reasons why: First, unlike the - en- and em-dash syntax supported by - EducateDashesOldSchool(), it's compatible with existing - entries written before SmartyPants 1.1, back when "--" was - only used for em-dashes. Second, em-dashes are more - common than en-dashes, and so it sort of makes sense that - the shortcut should be shorter to type. (Thanks to Aaron - Swartz for the idea.) - """ - text = re.sub(r"""---""", smartchars.endash, text) # em - text = re.sub(r"""--""", smartchars.emdash, text) # en - return text - - - -def educateEllipses(text): - """ - Parameter: String (unicode or bytes). - Returns: The `text`, with each instance of "..." translated to - an ellipsis character. - - Example input: Huh...? - Example output: Huh…? - """ - - text = re.sub(r"""\.\.\.""", smartchars.ellipsis, text) - text = re.sub(r"""\. \. \.""", smartchars.ellipsis, text) - return text - - -def stupefyEntities(text, language='en'): - """ - Parameter: String (unicode or bytes). - Returns: The `text`, with each SmartyPants character translated to - its ASCII counterpart. - - Example input: “Hello — world.” - Example output: "Hello -- world." - """ - smart = smartchars(language) - - text = re.sub(smart.endash, "-", text) # en-dash - text = re.sub(smart.emdash, "--", text) # em-dash - - text = re.sub(smart.osquote, "'", text) # open single quote - text = re.sub(smart.csquote, "'", text) # close single quote - - text = re.sub(smart.opquote, '"', text) # open double quote - text = re.sub(smart.cpquote, '"', text) # close double quote - - text = re.sub(smart.ellipsis, '...', text)# ellipsis - - return text - - -def processEscapes(text, restore=False): - r""" - Parameter: String (unicode or bytes). - Returns: The `text`, with after processing the following backslash - escape sequences. This is useful if you want to force a "dumb" - quote or other character to appear. - - Escape Value - ------ ----- - \\ \ - \" " - \' ' - \. . - \- - - \` ` - """ - replacements = ((r'\\', r'\'), - (r'\"', r'"'), - (r"\'", r'''), - (r'\.', r'.'), - (r'\-', r'-'), - (r'\`', r'`')) - if restore: - for (ch, rep) in replacements: - text = text.replace(rep, ch[1]) - else: - for (ch, rep) in replacements: - text = text.replace(ch, rep) - - return text - - -def tokenize(text): - """ - Parameter: String containing HTML markup. - Returns: An iterator that yields the tokens comprising the input - string. Each token is either a tag (possibly with nested, - tags contained therein, such as <a href="<MTFoo>">, or a - run of text between tags. Each yielded element is a - two-element tuple; the first is either 'tag' or 'text'; - the second is the actual value. - - Based on the _tokenize() subroutine from Brad Choate's MTRegex plugin. - <http://www.bradchoate.com/past/mtregex.php> - """ - - pos = 0 - length = len(text) - # tokens = [] - - depth = 6 - nested_tags = "|".join(['(?:<(?:[^<>]',] * depth) + (')*>)' * depth) - #match = r"""(?: <! ( -- .*? -- \s* )+ > ) | # comments - # (?: <\? .*? \?> ) | # directives - # %s # nested tags """ % (nested_tags,) - tag_soup = re.compile(r"""([^<]*)(<[^>]*>)""") - - token_match = tag_soup.search(text) - - previous_end = 0 - while token_match is not None: - if token_match.group(1): - yield ('text', token_match.group(1)) - - yield ('tag', token_match.group(2)) - - previous_end = token_match.end() - token_match = tag_soup.search(text, token_match.end()) - - if previous_end < len(text): - yield ('text', text[previous_end:]) - - - -if __name__ == "__main__": - - import itertools - try: - import locale # module missing in Jython - locale.setlocale(locale.LC_ALL, '') # set to user defaults - defaultlanguage = locale.getdefaultlocale()[0] - except: - defaultlanguage = 'en' - - # Normalize and drop unsupported subtags: - defaultlanguage = defaultlanguage.lower().replace('-', '_') - # split (except singletons, which mark the following tag as non-standard): - defaultlanguage = re.sub(r'_([a-zA-Z0-9])_', r'_\1-', defaultlanguage) - _subtags = [subtag for subtag in defaultlanguage.split('_')] - _basetag = _subtags.pop(0) - # find all combinations of subtags - for n in range(len(_subtags), 0, -1): - for tags in itertools.combinations(_subtags, n): - _tag = '-'.join((_basetag,)+tags) - if _tag in smartchars.quotes: - defaultlanguage = _tag - break - else: - if _basetag in smartchars.quotes: - defaultlanguage = _basetag - else: - defaultlanguage = 'en' - - - import argparse - parser = argparse.ArgumentParser( - description='Filter stdin making ASCII punctuation "smart".') - # parser.add_argument("text", help="text to be acted on") - parser.add_argument("-a", "--action", default="1", - help="what to do with the input (see --actionhelp)") - parser.add_argument("-e", "--encoding", default="utf8", - help="text encoding") - parser.add_argument("-l", "--language", default=defaultlanguage, - help="text language (BCP47 tag), " - "Default: %s"% defaultlanguage) - parser.add_argument("-q", "--alternative-quotes", action="store_true", - help="use alternative quote style") - parser.add_argument("--doc", action="store_true", - help="print documentation") - parser.add_argument("--actionhelp", action="store_true", - help="list available actions") - parser.add_argument("--stylehelp", action="store_true", - help="list available quote styles") - parser.add_argument("--test", action="store_true", - help="perform short self-test") - args = parser.parse_args() - - if args.doc: - print(__doc__) - elif args.actionhelp: - print(options) - elif args.stylehelp: - print() - print("Available styles (primary open/close, secondary open/close)") - print("language tag quotes") - print("============ ======") - for key in sorted(smartchars.quotes.keys()): - print("%-14s %s" % (key, smartchars.quotes[key])) - elif args.test: - # Unit test output goes to stderr. - import unittest - - class TestSmartypantsAllAttributes(unittest.TestCase): - # the default attribute is "1", which means "all". - def test_dates(self): - self.assertEqual(smartyPants("1440-80's"), u"1440-80’s") - self.assertEqual(smartyPants("1440-'80s"), u"1440-’80s") - self.assertEqual(smartyPants("1440---'80s"), u"1440–’80s") - self.assertEqual(smartyPants("1960's"), u"1960’s") - self.assertEqual(smartyPants("one two '60s"), u"one two ’60s") - self.assertEqual(smartyPants("'60s"), u"’60s") - - def test_educated_quotes(self): - self.assertEqual(smartyPants('"Isn\'t this fun?"'), u'“Isn’t this fun?”') - - def test_html_tags(self): - text = '<a src="foo">more</a>' - self.assertEqual(smartyPants(text), text) - - suite = unittest.TestLoader().loadTestsFromTestCase( - TestSmartypantsAllAttributes) - unittest.TextTestRunner().run(suite) - - else: - if args.alternative_quotes: - if '-x-altquot' in args.language: - args.language = args.language.replace('-x-altquot', '') - else: - args.language += '-x-altquot' - text = sys.stdin.read().decode(args.encoding) - print(smartyPants(text, attr=args.action, - language=args.language).encode(args.encoding)) diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/urischemes.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/urischemes.py deleted file mode 100644 index d9309ed..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/utils/urischemes.py +++ /dev/null @@ -1,136 +0,0 @@ -# $Id: urischemes.py 8376 2019-08-27 19:49:29Z milde $ -# Author: David Goodger <goodger@python.org> -# Copyright: This module has been placed in the public domain. - -""" -`schemes` is a dictionary with lowercase URI addressing schemes as -keys and descriptions as values. It was compiled from the index at -http://www.iana.org/assignments/uri-schemes (revised 2005-11-28) -and an older list at http://www.w3.org/Addressing/schemes.html. -""" - -# Many values are blank and should be filled in with useful descriptions. - -schemes = { - 'about': 'provides information on Navigator', - 'acap': 'Application Configuration Access Protocol; RFC 2244', - 'addbook': "To add vCard entries to Communicator's Address Book", - 'afp': 'Apple Filing Protocol', - 'afs': 'Andrew File System global file names', - 'aim': 'AOL Instant Messenger', - 'callto': 'for NetMeeting links', - 'castanet': 'Castanet Tuner URLs for Netcaster', - 'chttp': 'cached HTTP supported by RealPlayer', - 'cid': 'content identifier; RFC 2392', - 'crid': 'TV-Anytime Content Reference Identifier; RFC 4078', - 'data': ('allows inclusion of small data items as "immediate" data; ' - 'RFC 2397'), - 'dav': 'Distributed Authoring and Versioning Protocol; RFC 2518', - 'dict': 'dictionary service protocol; RFC 2229', - 'dns': 'Domain Name System resources', - 'eid': ('External ID; non-URL data; general escape mechanism to allow ' - 'access to information for applications that are too ' - 'specialized to justify their own schemes'), - 'fax': ('a connection to a terminal that can handle telefaxes ' - '(facsimiles); RFC 2806'), - 'feed': 'NetNewsWire feed', - 'file': 'Host-specific file names; RFC 1738', - 'finger': '', - 'freenet': '', - 'ftp': 'File Transfer Protocol; RFC 1738', - 'go': 'go; RFC 3368', - 'gopher': 'The Gopher Protocol', - 'gsm-sms': ('Global System for Mobile Communications Short Message ' - 'Service'), - 'h323': ('video (audiovisual) communication on local area networks; ' - 'RFC 3508'), - 'h324': ('video and audio communications over low bitrate connections ' - 'such as POTS modem connections'), - 'hdl': 'CNRI handle system', - 'hnews': 'an HTTP-tunneling variant of the NNTP news protocol', - 'http': 'Hypertext Transfer Protocol; RFC 2616', - 'https': 'HTTP over SSL; RFC 2818', - 'hydra': 'SubEthaEdit URI. See http://www.codingmonkeys.de/subethaedit.', - 'iioploc': 'Internet Inter-ORB Protocol Location?', - 'ilu': 'Inter-Language Unification', - 'im': 'Instant Messaging; RFC 3860', - 'imap': 'Internet Message Access Protocol; RFC 2192', - 'info': 'Information Assets with Identifiers in Public Namespaces', - 'ior': 'CORBA interoperable object reference', - 'ipp': 'Internet Printing Protocol; RFC 3510', - 'irc': 'Internet Relay Chat', - 'iris.beep': 'iris.beep; RFC 3983', - 'iseek': 'See www.ambrosiasw.com; a little util for OS X.', - 'jar': 'Java archive', - 'javascript': ('JavaScript code; evaluates the expression after the ' - 'colon'), - 'jdbc': 'JDBC connection URI.', - 'ldap': 'Lightweight Directory Access Protocol', - 'lifn': '', - 'livescript': '', - 'lrq': '', - 'mailbox': 'Mail folder access', - 'mailserver': 'Access to data available from mail servers', - 'mailto': 'Electronic mail address; RFC 2368', - 'md5': '', - 'mid': 'message identifier; RFC 2392', - 'mocha': '', - 'modem': ('a connection to a terminal that can handle incoming data ' - 'calls; RFC 2806'), - 'mtqp': 'Message Tracking Query Protocol; RFC 3887', - 'mupdate': 'Mailbox Update (MUPDATE) Protocol; RFC 3656', - 'news': 'USENET news; RFC 1738', - 'nfs': 'Network File System protocol; RFC 2224', - 'nntp': 'USENET news using NNTP access; RFC 1738', - 'opaquelocktoken': 'RFC 2518', - 'phone': '', - 'pop': 'Post Office Protocol; RFC 2384', - 'pop3': 'Post Office Protocol v3', - 'pres': 'Presence; RFC 3859', - 'printer': '', - 'prospero': 'Prospero Directory Service; RFC 4157', - 'rdar': ('URLs found in Darwin source ' - '(http://www.opensource.apple.com/darwinsource/).'), - 'res': '', - 'rtsp': 'real time streaming protocol; RFC 2326', - 'rvp': '', - 'rwhois': '', - 'rx': 'Remote Execution', - 'sdp': '', - 'service': 'service location; RFC 2609', - 'shttp': 'secure hypertext transfer protocol', - 'sip': 'Session Initiation Protocol; RFC 3261', - 'sips': 'secure session intitiaion protocol; RFC 3261', - 'smb': 'SAMBA filesystems.', - 'snews': 'For NNTP postings via SSL', - 'snmp': 'Simple Network Management Protocol; RFC 4088', - 'soap.beep': 'RFC 3288', - 'soap.beeps': 'RFC 3288', - 'ssh': 'Reference to interactive sessions via ssh.', - 't120': 'real time data conferencing (audiographics)', - 'tag': 'RFC 4151', - 'tcp': '', - 'tel': ('a connection to a terminal that handles normal voice ' - 'telephone calls, a voice mailbox or another voice messaging ' - 'system or a service that can be operated using DTMF tones; ' - 'RFC 3966.'), - 'telephone': 'telephone', - 'telnet': 'Reference to interactive sessions; RFC 4248', - 'tftp': 'Trivial File Transfer Protocol; RFC 3617', - 'tip': 'Transaction Internet Protocol; RFC 2371', - 'tn3270': 'Interactive 3270 emulation sessions', - 'tv': '', - 'urn': 'Uniform Resource Name; RFC 2141', - 'uuid': '', - 'vemmi': 'versatile multimedia interface; RFC 2122', - 'videotex': '', - 'view-source': 'displays HTML code that was generated with JavaScript', - 'wais': 'Wide Area Information Servers; RFC 4156', - 'whodp': '', - 'whois++': 'Distributed directory service.', - 'x-man-page': ('Opens man page in Terminal.app on OS X ' - '(see macosxhints.com)'), - 'xmlrpc.beep': 'RFC 3529', - 'xmlrpc.beeps': 'RFC 3529', - 'z39.50r': 'Z39.50 Retrieval; RFC 2056', - 'z39.50s': 'Z39.50 Session; RFC 2056',} diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__init__.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__init__.py deleted file mode 100644 index a29bd8c..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__init__.py +++ /dev/null @@ -1,143 +0,0 @@ -# $Id: __init__.py 8239 2018-11-21 21:46:00Z milde $ -# Author: David Goodger <goodger@python.org> -# Copyright: This module has been placed in the public domain. - -""" -This package contains Docutils Writer modules. -""" - -__docformat__ = 'reStructuredText' - -import os.path -import sys - -import docutils -from docutils import languages, Component -from docutils.transforms import universal - - -class Writer(Component): - - """ - Abstract base class for docutils Writers. - - Each writer module or package must export a subclass also called 'Writer'. - Each writer must support all standard node types listed in - `docutils.nodes.node_class_names`. - - The `write()` method is the main entry point. - """ - - component_type = 'writer' - config_section = 'writers' - - def get_transforms(self): - return Component.get_transforms(self) + [ - universal.Messages, - universal.FilterMessages, - universal.StripClassesAndElements,] - - document = None - """The document to write (Docutils doctree); set by `write`.""" - - output = None - """Final translated form of `document` (Unicode string for text, binary - string for other forms); set by `translate`.""" - - language = None - """Language module for the document; set by `write`.""" - - destination = None - """`docutils.io` Output object; where to write the document. - Set by `write`.""" - - def __init__(self): - - # Used by HTML and LaTeX writer for output fragments: - self.parts = {} - """Mapping of document part names to fragments of `self.output`. - Values are Unicode strings; encoding is up to the client. The 'whole' - key should contain the entire document output. - """ - - def write(self, document, destination): - """ - Process a document into its final form. - - Translate `document` (a Docutils document tree) into the Writer's - native format, and write it out to its `destination` (a - `docutils.io.Output` subclass object). - - Normally not overridden or extended in subclasses. - """ - self.document = document - self.language = languages.get_language( - document.settings.language_code, - document.reporter) - self.destination = destination - self.translate() - output = self.destination.write(self.output) - return output - - def translate(self): - """ - Do final translation of `self.document` into `self.output`. Called - from `write`. Override in subclasses. - - Usually done with a `docutils.nodes.NodeVisitor` subclass, in - combination with a call to `docutils.nodes.Node.walk()` or - `docutils.nodes.Node.walkabout()`. The ``NodeVisitor`` subclass must - support all standard elements (listed in - `docutils.nodes.node_class_names`) and possibly non-standard elements - used by the current Reader as well. - """ - raise NotImplementedError('subclass must override this method') - - def assemble_parts(self): - """Assemble the `self.parts` dictionary. Extend in subclasses.""" - self.parts['whole'] = self.output - self.parts['encoding'] = self.document.settings.output_encoding - self.parts['version'] = docutils.__version__ - - -class UnfilteredWriter(Writer): - - """ - A writer that passes the document tree on unchanged (e.g. a - serializer.) - - Documents written by UnfilteredWriters are typically reused at a - later date using a subclass of `readers.ReReader`. - """ - - def get_transforms(self): - # Do not add any transforms. When the document is reused - # later, the then-used writer will add the appropriate - # transforms. - return Component.get_transforms(self) - - -_writer_aliases = { - 'html': 'html4css1', # may change to html5 some day - 'html4': 'html4css1', - 'html5': 'html5_polyglot', - 'latex': 'latex2e', - 'pprint': 'pseudoxml', - 'pformat': 'pseudoxml', - 'pdf': 'rlpdf', - 's5': 's5_html', - 'xelatex': 'xetex', - 'xhtml': 'html5_polyglot', - 'xhtml10': 'html4css1', - 'xml': 'docutils_xml'} - -def get_writer_class(writer_name): - """Return the Writer class from the `writer_name` module.""" - writer_name = writer_name.lower() - if writer_name in _writer_aliases: - writer_name = _writer_aliases[writer_name] - try: - module = __import__(writer_name, globals(), locals(), level=1) - except ImportError: - module = __import__(writer_name, globals(), locals(), level=0) - return module.Writer diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/__init__.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index f029ea58d94b159deefb3e795a62f707c5949ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4062 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 EfAs@Uo&W#< diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/_html_base.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/_html_base.cpython-38.pyc deleted file mode 100644 index 0e71baa2279fb0aa1120814c3cbe09f4e21a8c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57667 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⁡_}nbub!z_p&rk#phkFe#5>a4z!Z&}&H3 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 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/docutils_xml.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/docutils_xml.cpython-38.pyc deleted file mode 100644 index 3576e586781fa00264eebea396d223769594906f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5717 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%0Did(hiBju2wEJu8oz^eofakUff@*rb) z#(ftue=o~rv%HKfTLb_y*Xo4ZT-{aGOs*=xklS|S%n>UEP!j(Ey>x}Z9RgG5qk1Z_ zp-SO0T0+cL<<JwViCmO8xa1QQIWM5tL1;tyV>%UQ-pM<rsxKONVdh6Fy@94Y`?Ty~ z1_~2XeQdGB8<?N*CG-+C<x9w^P;?8XP7DS8Pk<elsMJ4n54wU}0IxPjrOTB}^Zp9_ z*r}ZyWrOQqC)=u7M`hHU-C)WnI{9D5%Q}X-No`r?g8+$X5cp-)$*esH#7&UODwQTk zaj2;@CzJVWv<F=}``VyHdyD9eR#%Y0!8lVPZlLE^FZ5v5Feivtedtr4*i_w#uc1`i zv>Id>w?;`k$ul$6{P@#JWj5DUCqKl)$rYt@KKp3+wv9y+TFJ^;hNC-Zi?E1_Q6k$g L7tDp)!q5K)Uyzw1 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/manpage.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/manpage.cpython-38.pyc deleted file mode 100644 index 3b1ef3604c56d1ef64f02abb4833f66eba8e241f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41926 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 XgA~7ri3v8W^yXh8aq;5Cz3cxU_R#Te diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/null.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/null.cpython-38.pyc deleted file mode 100644 index 8cb544ed075dd9a57e6d30787c3bed33b548c77e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmY*WyKdVs6eTHImR+aFP-MyCselJtLx2DQf+9tRY+i~q0Ee)GE|aLGD20>|#B1|2 z`Hg-+KR|1z{z9hSE9K!{;9T%rO6Ty9=Q}%7hV}c~*UMj=u|Gt%OCmWzgpb&ODFz&b z<)u)9voi(}$Oi_}i0{$QNJ$udVT*XPH~l<^YU!%xrf}Eu3tu$Gucm)dgFW(YeAf>` zPJFurk`qLjV>3)~bQHi<1Ol}qH3D>aU@C?fea2lpC@**?U2E;;9rgL3?nx}iOs_?2 z!YLw9Fkq;{*N@mb8H~O1F;4sTbd)w_oz_LYY+aq@KMXAIZj7-@ec(%Tdw8EhmA6e{ zL;9R1CG%B%-%T2yxnQ%#d>|(}2jiRF;jF9I%{2x{w02o(wC<)_mld>@)-$bd+sr=i zOhQ}Nm2V8F_j%>6ifbKA-V~Kn`~PzdrZx_Y%L^0y<R!~nDxc7dqR$Y4SR!O3xfK0$ xy%=?4tudL_DtQU$Bm7S7o};zJcQi00>HpZ$?(dEyyX1I?@@YgaWGCe;`Umd+mKFd2 diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/pseudoxml.cpython-38.pyc b/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/__pycache__/pseudoxml.cpython-38.pyc deleted file mode 100644 index f29b879549d4afed0b79eb2ee3c0e9fab19493cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmY*X&2G~`5MFyXjuZNmGYHAopeB((;)JS7J#c|sT7KjMi{+hAm$kj!U8`-xjXnq* z`!YO$ubg-VPR!Uz6-L_6Gdts%Z)W!0{{EPu{QCU<li-Z~CSz9w8Yg(%GX%v_rh+t3 zq2f9$dCCL!nkk_McT5d{UyAQM6)HMo)8YDbd{&f3LsC>8Y?bLm)p=7w<r8lKk`K1P z`=jKVz7C@lx<DnyL8I!~$G30h<8)%-%-bgSjRkcMH~tUOVD~{g?0&N@Cwo^yG*0li zBLrYbmZc$*<|;&LJRK;JMrxp<JC+XBP{sI-l|ag)HtIP|c^esHk#{>ZtJ;>CPe(ni zn^LbQ4{FcdTB^Cs1H`S6PPeCc+yvnpyJSCtpZJxbVpuI$Vwre55*uMm8`X_Bjh_as zaG+QB%+hlH9xr@p7N#(>rZQRn71Zqd0zl8?3tPg~%i9H|@r8Da%~Tc-6zAr)9eJBo zPG=q-6CL8kg7u_tcK+bZI|n&YNT(*c2Ivu}07-}I=jRuN+w`5d#+cfAmt<Ne{h(&f zKwhkhJOK@~Y&Spex|oJ`glXESkL&JwctqFnHrG?MdWzxta6@tH!xhC+R#^#Bwqq&F zS~Z&VJt?o6Om94+O+2XdAg`-c@kKhweNk8GlmBh0zyLkGyZ~ooEN%A)4hU%WJ3uro zP2v!bqp&y>Tm%9!=ACCb9kfF!aT`*m`<>Evi)OcK+L7hkL_5j5TKyni^<5ngs0=*| JAq3y!{{VmO@mBx< diff --git a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/_html_base.py b/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/_html_base.py deleted file mode 100644 index c58aef7..0000000 --- a/blog-generator/venv/lib/python3.8/site-packages/docutils/writers/_html_base.py +++ /dev/null @@ -1,1670 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# :Author: David Goodger, Günter Milde -# Based on the html4css1 writer by David Goodger. -# :Maintainer: docutils-develop@lists.sourceforge.net -# :Revision: $Revision: 8412 $ -# :Date: $Date: 2005-06-28$ -# :Copyright: © 2016 David Goodger, Günter Milde -# :License: Released under the terms of the `2-Clause BSD license`_, in short: -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. -# This file is offered as-is, without any warranty. -# -# .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause - -"""common definitions for Docutils HTML writers""" - -import sys -import os.path -import re - -try: # check for the Python Imaging Library - import PIL.Image -except ImportError: - try: # sometimes PIL modules are put in PYTHONPATH's root - import Image - class PIL(object): pass # dummy wrapper - PIL.Image = Image - except ImportError: - PIL = None - -import docutils -from docutils import nodes, utils, writers, languages, io -from docutils.utils.error_reporting import SafeString -from docutils.transforms import writer_aux -from docutils.utils.math import (unichar2tex, pick_math_environment, - math2html, latex2mathml, tex2mathml_extern) - -if sys.version_info >= (3, 0): - from urllib.request import url2pathname -else: - from urllib import url2pathname - -if sys.version_info >= (3, 0): - unicode = str # noqa - - -class Writer(writers.Writer): - - supported = ('html', 'xhtml') # update in subclass - """Formats this writer supports.""" - - # default_stylesheets = [] # set in subclass! - # default_stylesheet_dirs = ['.'] # set in subclass! - default_template = 'template.txt' - # default_template_path = ... # set in subclass! - # settings_spec = ... # set in subclass! - - settings_defaults = {'output_encoding_error_handler': 'xmlcharrefreplace'} - - # config_section = ... # set in subclass! - config_section_dependencies = ('writers', 'html writers') - - visitor_attributes = ( - 'head_prefix', 'head', 'stylesheet', 'body_prefix', - 'body_pre_docinfo', 'docinfo', 'body', 'body_suffix', - 'title', 'subtitle', 'header', 'footer', 'meta', 'fragment', - 'html_prolog', 'html_head', 'html_title', 'html_subtitle', - 'html_body') - - def get_transforms(self): - return writers.Writer.get_transforms(self) + [writer_aux.Admonitions] - - def translate(self): - self.visitor = visitor = self.translator_class(self.document) - self.document.walkabout(visitor) - for attr in self.visitor_attributes: - setattr(self, attr, getattr(visitor, attr)) - self.output = self.apply_template() - - def apply_template(self): - template_file = open(self.document.settings.template, 'rb') - template = unicode(template_file.read(), 'utf-8') - template_file.close() - subs = self.interpolation_dict() - return template % subs - - def interpolation_dict(self): - subs = {} - settings = self.document.settings - for attr in self.visitor_attributes: - subs[attr] = ''.join(getattr(self, attr)).rstrip('\n') - subs['encoding'] = settings.output_encoding - subs['version'] = docutils.__version__ - return subs - - def assemble_parts(self): - writers.Writer.assemble_parts(self) - for part in self.visitor_attributes: - self.parts[part] = ''.join(getattr(self, part)) - - -class HTMLTranslator(nodes.NodeVisitor): - - """ - Generic Docutils to HTML translator. - - See the `html4css1` and `html5_polyglot` writers for full featured - HTML writers. - - .. IMPORTANT:: - The `visit_*` and `depart_*` methods use a - heterogeneous stack, `self.context`. - When subclassing, make sure to be consistent in its use! - - Examples for robust coding: - - a) Override both `visit_*` and `depart_*` methods, don't call the - parent functions. - - b) Extend both and unconditionally call the parent functions:: - - def visit_example(self, node): - if foo: - self.body.append('<div class="foo">') - html4css1.HTMLTranslator.visit_example(self, node) - - def depart_example(self, node): - html4css1.HTMLTranslator.depart_example(self, node) - if foo: - self.body.append('</div>') - - c) Extend both, calling the parent functions under the same - conditions:: - - def visit_example(self, node): - if foo: - self.body.append('<div class="foo">\n') - else: # call the parent method - _html_base.HTMLTranslator.visit_example(self, node) - - def depart_example(self, node): - if foo: - self.body.append('</div>\n') - else: # call the parent method - _html_base.HTMLTranslator.depart_example(self, node) - - d) Extend one method (call the parent), but don't otherwise use the - `self.context` stack:: - - def depart_example(self, node): - _html_base.HTMLTranslator.depart_example(self, node) - if foo: - # implementation-specific code - # that does not use `self.context` - self.body.append('</div>\n') - - This way, changes in stack use will not bite you. - """ - - xml_declaration = '<?xml version="1.0" encoding="%s" ?>\n' - doctype = '<!DOCTYPE html>\n' - doctype_mathml = doctype - - head_prefix_template = ('<html xmlns="http://www.w3.org/1999/xhtml"' - ' xml:lang="%(lang)s" lang="%(lang)s">\n<head>\n') - content_type = ('<meta charset="%s"/>\n') - generator = ('<meta name="generator" content="Docutils %s: ' - 'http://docutils.sourceforge.net/" />\n') - - # Template for the MathJax script in the header: - mathjax_script = '<script type="text/javascript" src="%s"></script>\n' - - mathjax_url = 'file:/usr/share/javascript/mathjax/MathJax.js' - """ - URL of the MathJax javascript library. - - The MathJax library ought to be installed on the same - server as the rest of the deployed site files and specified - in the `math-output` setting appended to "mathjax". - See `Docutils Configuration`__. - - __ http://docutils.sourceforge.net/docs/user/config.html#math-output - - The fallback tries a local MathJax installation at - ``/usr/share/javascript/mathjax/MathJax.js``. - """ - - stylesheet_link = '<link rel="stylesheet" href="%s" type="text/css" />\n' - embedded_stylesheet = '<style type="text/css">\n\n%s\n</style>\n' - words_and_spaces = re.compile(r'[^ \n]+| +|\n') - # wrap point inside word: - in_word_wrap_point = re.compile(r'.+\W\W.+|[-?].+', re.U) - lang_attribute = 'lang' # name changes to 'xml:lang' in XHTML 1.1 - - special_characters = {ord('&'): u'&', - ord('<'): u'<', - ord('"'): u'"', - ord('>'): u'>', - ord('@'): u'@', # may thwart address harvesters - } - """Character references for characters with a special meaning in HTML.""" - - - def __init__(self, document): - nodes.NodeVisitor.__init__(self, document) - self.settings = settings = document.settings - lcode = settings.language_code - self.language = languages.get_language(lcode, document.reporter) - self.meta = [self.generator % docutils.__version__] - self.head_prefix = [] - self.html_prolog = [] - if settings.xml_declaration: - self.head_prefix.append(self.xml_declaration - % settings.output_encoding) - # self.content_type = "" - # encoding not interpolated: - self.html_prolog.append(self.xml_declaration) - self.head = self.meta[:] - self.stylesheet = [self.stylesheet_call(path) - for path in utils.get_stylesheet_list(settings)] - self.body_prefix = ['</head>\n<body>\n'] - # document title, subtitle display - self.body_pre_docinfo = [] - # author, date, etc. - self.docinfo = [] - self.body = [] - self.fragment = [] - self.body_suffix = ['</body>\n</html>\n'] - self.section_level = 0 - self.initial_header_level = int(settings.initial_header_level) - - self.math_output = settings.math_output.split() - self.math_output_options = self.math_output[1:] - self.math_output = self.math_output[0].lower() - - self.context = [] - """Heterogeneous stack. - - Used by visit_* and depart_* functions in conjunction with the tree - traversal. Make sure that the pops correspond to the pushes.""" - - self.topic_classes = [] # TODO: replace with self_in_contents - self.colspecs = [] - self.compact_p = True - self.compact_simple = False - self.compact_field_list = False - self.in_docinfo = False - self.in_sidebar = False - self.in_footnote_list = False - self.title = [] - self.subtitle = [] - self.header = [] - self.footer = [] - self.html_head = [self.content_type] # charset not interpolated - self.html_title = [] - self.html_subtitle = [] - self.html_body = [] - self.in_document_title = 0 # len(self.body) or 0 - self.in_mailto = False - self.author_in_authors = False # for html4css1 - self.math_header = [] - - def astext(self): - return ''.join(self.head_prefix + self.head - + self.stylesheet + self.body_prefix - + self.body_pre_docinfo + self.docinfo - + self.body + self.body_suffix) - - def encode(self, text): - """Encode special characters in `text` & return.""" - # Use only named entities known in both XML and HTML - # other characters are automatically encoded "by number" if required. - # @@@ A codec to do these and all other HTML entities would be nice. - text = unicode(text) - return text.translate(self.special_characters) - - def cloak_mailto(self, uri): - """Try to hide a mailto: URL from harvesters.""" - # Encode "@" using a URL octet reference (see RFC 1738). - # Further cloaking with HTML entities will be done in the - # `attval` function. - return uri.replace('@', '%40') - - def cloak_email(self, addr): - """Try to hide the link text of a email link from harversters.""" - # Surround at-signs and periods with <span> tags. ("@" has - # already been encoded to "@" by the `encode` method.) - addr = addr.replace('@', '<span>@</span>') - addr = addr.replace('.', '<span>.</span>') - return addr - - def attval(self, text, - whitespace=re.compile('[\n\r\t\v\f]')): - """Cleanse, HTML encode, and return attribute value text.""" - encoded = self.encode(whitespace.sub(' ', text)) - if self.in_mailto and self.settings.cloak_email_addresses: - # Cloak at-signs ("%40") and periods with HTML entities. - encoded = encoded.replace('%40', '%40') - encoded = encoded.replace('.', '.') - return encoded - - def stylesheet_call(self, path): - """Return code to reference or embed stylesheet file `path`""" - if self.settings.embed_stylesheet: - try: - content = io.FileInput(source_path=path, - encoding='utf-8').read() - self.settings.record_dependencies.add(path) - except IOError as err: - msg = u"Cannot embed stylesheet '%s': %s." % ( - path, SafeString(err.strerror)) - self.document.reporter.error(msg) - return '<--- %s --->\n' % msg - return self.embedded_stylesheet % content - # else link to style file: - if self.settings.stylesheet_path: - # adapt path relative to output (cf. config.html#stylesheet-path) - path = utils.relative_path(self.settings._destination, path) - return self.stylesheet_link % self.encode(path) - - def starttag(self, node, tagname, suffix='\n', empty=False, **attributes): - """ - Construct and return a start tag given a node (id & class attributes - are extracted), tag name, and optional attributes. - """ - tagname = tagname.lower() - prefix = [] - atts = {} - ids = [] - for (name, value) in attributes.items(): - atts[name.lower()] = value - classes = [] - languages = [] - # unify class arguments and move language specification - for cls in node.get('classes', []) + atts.pop('class', '').split(): - if cls.startswith('language-'): - languages.append(cls[9:]) - elif cls.strip() and cls not in classes: - classes.append(cls) - if languages: - # attribute name is 'lang' in XHTML 1.0 but 'xml:lang' in 1.1 - atts[self.lang_attribute] = languages[0] - if classes: - atts['class'] = ' '.join(classes) - assert 'id' not in atts - ids.extend(node.get('ids', [])) - if 'ids' in atts: - ids.extend(atts['ids']) - del atts['ids'] - if ids: - atts['id'] = ids[0] - for id in ids[1:]: - # Add empty "span" elements for additional IDs. Note - # that we cannot use empty "a" elements because there - # may be targets inside of references, but nested "a" - # elements aren't allowed in XHTML (even if they do - # not all have a "href" attribute). - if empty or isinstance(node, - (nodes.bullet_list, nodes.docinfo, - nodes.definition_list, nodes.enumerated_list, - nodes.field_list, nodes.option_list, - nodes.table)): - # Insert target right in front of element. - prefix.append('<span id="%s"></span>' % id) - else: - # Non-empty tag. Place the auxiliary <span> tag - # *inside* the element, as the first child. - suffix += '<span id="%s"></span>' % id - attlist = sorted(atts.items()) - parts = [tagname] - for name, value in attlist: - # value=None was used for boolean attributes without - # value, but this isn't supported by XHTML. - assert value is not None - if isinstance(value, list): - values = [unicode(v) for v in value] - parts.append('%s="%s"' % (name.lower(), - self.attval(' '.join(values)))) - else: - parts.append('%s="%s"' % (name.lower(), - self.attval(unicode(value)))) - if empty: - infix = ' /' - else: - infix = '' - return ''.join(prefix) + '<%s%s>' % (' '.join(parts), infix) + suffix - - def emptytag(self, node, tagname, suffix='\n', **attributes): - """Construct and return an XML-compatible empty tag.""" - return self.starttag(node, tagname, suffix, empty=True, **attributes) - - def set_class_on_child(self, node, class_, index=0): - """ - Set class `class_` on the visible child no. index of `node`. - Do nothing if node has fewer children than `index`. - """ - children = [n for n in node if not isinstance(n, nodes.Invisible)] - try: - child = children[index] - except IndexError: - return - child['classes'].append(class_) - - def visit_Text(self, node): - text = node.astext() - encoded = self.encode(text) - if self.in_mailto and self.settings.cloak_email_addresses: - encoded = self.cloak_email(encoded) - self.body.append(encoded) - - def depart_Text(self, node): - pass - - def visit_abbreviation(self, node): - # @@@ implementation incomplete ("title" attribute) - self.body.append(self.starttag(node, 'abbr', '')) - - def depart_abbreviation(self, node): - self.body.append('</abbr>') - - def visit_acronym(self, node): - # @@@ implementation incomplete ("title" attribute) - self.body.append(self.starttag(node, 'acronym', '')) - - def depart_acronym(self, node): - self.body.append('</acronym>') - - def visit_address(self, node): - self.visit_docinfo_item(node, 'address', meta=False) - self.body.append(self.starttag(node, 'pre', - suffix= '', CLASS='address')) - - def depart_address(self, node): - self.body.append('\n</pre>\n') - self.depart_docinfo_item() - - def visit_admonition(self, node): - node['classes'].insert(0, 'admonition') - self.body.append(self.starttag(node, 'div')) - - def depart_admonition(self, node=None): - self.body.append('</div>\n') - - attribution_formats = {'dash': (u'\u2014', ''), - 'parentheses': ('(', ')'), - 'parens': ('(', ')'), - 'none': ('', '')} - - def visit_attribution(self, node): - prefix, suffix = self.attribution_formats[self.settings.attribution] - self.context.append(suffix) - self.body.append( - self.starttag(node, 'p', prefix, CLASS='attribution')) - - def depart_attribution(self, node): - self.body.append(self.context.pop() + '</p>\n') - - def visit_author(self, node): - if not(isinstance(node.parent, nodes.authors)): - self.visit_docinfo_item(node, 'author') - self.body.append('<p>') - - def depart_author(self, node): - self.body.append('</p>') - if isinstance(node.parent, nodes.authors): - self.body.append('\n') - else: - self.depart_docinfo_item() - - def visit_authors(self, node): - self.visit_docinfo_item(node, 'authors') - - def depart_authors(self, node): - self.depart_docinfo_item() - - def visit_block_quote(self, node): - self.body.append(self.starttag(node, 'blockquote')) - - def depart_block_quote(self, node): - self.body.append('</blockquote>\n') - - def check_simple_list(self, node): - """Check for a simple list that can be rendered compactly.""" - visitor = SimpleListChecker(self.document) - try: - node.walk(visitor) - except nodes.NodeFound: - return False - else: - return True - - # Compact lists - # ------------ - # Include definition lists and field lists (in addition to ordered - # and unordered lists) in the test if a list is "simple" (cf. the - # html4css1.HTMLTranslator docstring and the SimpleListChecker class at - # the end of this file). - - def is_compactable(self, node): - # explicite class arguments have precedence - if 'compact' in node['classes']: - return True - if 'open' in node['classes']: - return False - # check config setting: - if (isinstance(node, (nodes.field_list, nodes.definition_list)) - and not self.settings.compact_field_lists): - return False - if (isinstance(node, (nodes.enumerated_list, nodes.bullet_list)) - and not self.settings.compact_lists): - return False - # more special cases: - if (self.topic_classes == ['contents']): # TODO: self.in_contents - return True - # check the list items: - return self.check_simple_list(node) - - def visit_bullet_list(self, node): - atts = {} - old_compact_simple = self.compact_simple - self.context.append((self.compact_simple, self.compact_p)) - self.compact_p = None - self.compact_simple = self.is_compactable(node) - if self.compact_simple and not old_compact_simple: - atts['class'] = 'simple' - self.body.append(self.starttag(node, 'ul', **atts)) - - def depart_bullet_list(self, node): - self.compact_simple, self.compact_p = self.context.pop() - self.body.append('</ul>\n') - - def visit_caption(self, node): - self.body.append(self.starttag(node, 'p', '', CLASS='caption')) - - def depart_caption(self, node): - self.body.append('</p>\n') - - # citations - # --------- - # Use definition list instead of table for bibliographic references. - # Join adjacent citation entries. - - def visit_citation(self, node): - if not self.in_footnote_list: - self.body.append('<dl class="citation">\n') - self.in_footnote_list = True - - def depart_citation(self, node): - self.body.append('</dd>\n') - if not isinstance(node.next_node(descend=False, siblings=True), - nodes.citation): - self.body.append('</dl>\n') - self.in_footnote_list = False - - def visit_citation_reference(self, node): - href = '#' - if 'refid' in node: - href += node['refid'] - elif 'refname' in node: - href += self.document.nameids[node['refname']] - # else: # TODO system message (or already in the transform)? - # 'Citation reference missing.' - self.body.append(self.starttag( - node, 'a', '[', CLASS='citation-reference', href=href)) - - def depart_citation_reference(self, node): - self.body.append(']</a>') - - # classifier - # ---------- - # don't insert classifier-delimiter here (done by CSS) - - def visit_classifier(self, node): - self.body.append(self.starttag(node, 'span', '', CLASS='classifier')) - - def depart_classifier(self, node): - self.body.append('</span>') - - def visit_colspec(self, node): - self.colspecs.append(node) - # "stubs" list is an attribute of the tgroup element: - node.parent.stubs.append(node.attributes.get('stub')) - - def depart_colspec(self, node): - # write out <colgroup> when all colspecs are processed - if isinstance(node.next_node(descend=False, siblings=True), - nodes.colspec): - return - if 'colwidths-auto' in node.parent.parent['classes'] or ( - 'colwidths-auto' in self.settings.table_style and - ('colwidths-given' not in node.parent.parent['classes'])): - return - total_width = sum(node['colwidth'] for node in self.colspecs) - self.body.append(self.starttag(node, 'colgroup')) - for node in self.colspecs: - colwidth = int(node['colwidth'] * 100.0 / total_width + 0.5) - self.body.append(self.emptytag(node, 'col', - style='width: %i%%' % colwidth)) - self.body.append('</colgroup>\n') - - def visit_comment(self, node, - sub=re.compile('-(?=-)').sub): - """Escape double-dashes in comment text.""" - self.body.append('<!-- %s -->\n' % sub('- ', node.astext())) - # Content already processed: - raise nodes.SkipNode - - def visit_compound(self, node): - self.body.append(self.starttag(node, 'div', CLASS='compound')) - if len(node) > 1: - node[0]['classes'].append('compound-first') - node[-1]['classes'].append('compound-last') - for child in node[1:-1]: - child['classes'].append('compound-middle') - - def depart_compound(self, node): - self.body.append('</div>\n') - - def visit_container(self, node): - self.body.append(self.starttag(node, 'div', CLASS='docutils container')) - - def depart_container(self, node): - self.body.append('</div>\n') - - def visit_contact(self, node): - self.visit_docinfo_item(node, 'contact', meta=False) - - def depart_contact(self, node): - self.depart_docinfo_item() - - def visit_copyright(self, node): - self.visit_docinfo_item(node, 'copyright') - - def depart_copyright(self, node): - self.depart_docinfo_item() - - def visit_date(self, node): - self.visit_docinfo_item(node, 'date') - - def depart_date(self, node): - self.depart_docinfo_item() - - def visit_decoration(self, node): - pass - - def depart_decoration(self, node): - pass - - def visit_definition(self, node): - self.body.append('</dt>\n') - self.body.append(self.starttag(node, 'dd', '')) - - def depart_definition(self, node): - self.body.append('</dd>\n') - - def visit_definition_list(self, node): - classes = node.setdefault('classes', []) - if self.is_compactable(node): - classes.append('simple') - self.body.append(self.starttag(node, 'dl')) - - def depart_definition_list(self, node): - self.body.append('</dl>\n') - - def visit_definition_list_item(self, node): - # pass class arguments, ids and names to definition term: - node.children[0]['classes'] = ( - node.get('classes', []) + node.children[0].get('classes', [])) - node.children[0]['ids'] = ( - node.get('ids', []) + node.children[0].get('ids', [])) - node.children[0]['names'] = ( - node.get('names', []) + node.children[0].get('names', [])) - - def depart_definition_list_item(self, node): - pass - - def visit_description(self, node): - self.body.append(self.starttag(node, 'dd', '')) - - def depart_description(self, node): - self.body.append('</dd>\n') - - def visit_docinfo(self, node): - self.context.append(len(self.body)) - classes = 'docinfo' - if (self.is_compactable(node)): - classes += ' simple' - self.body.append(self.starttag(node, 'dl', CLASS=classes)) - - def depart_docinfo(self, node): - self.body.append('</dl>\n') - start = self.context.pop() - self.docinfo = self.body[start:] - self.body = [] - - def visit_docinfo_item(self, node, name, meta=True): - if meta: - meta_tag = '<meta name="%s" content="%s" />\n' \ - % (name, self.attval(node.astext())) - self.add_meta(meta_tag) - self.body.append('<dt class="%s">%s</dt>\n' - % (name, self.language.labels[name])) - self.body.append(self.starttag(node, 'dd', '', CLASS=name)) - - def depart_docinfo_item(self): - self.body.append('</dd>\n') - - def visit_doctest_block(self, node): - self.body.append(self.starttag(node, 'pre', suffix='', - CLASS='code python doctest')) - - def depart_doctest_block(self, node): - self.body.append('\n</pre>\n') - - def visit_document(self, node): - title = (node.get('title', '') or os.path.basename(node['source']) - or 'docutils document without title') - self.head.append('<title>%s\n' % self.encode(title)) - - def depart_document(self, node): - self.head_prefix.extend([self.doctype, - self.head_prefix_template % - {'lang': self.settings.language_code}]) - self.html_prolog.append(self.doctype) - self.meta.insert(0, self.content_type % self.settings.output_encoding) - self.head.insert(0, self.content_type % self.settings.output_encoding) - if 'name="dcterms.' in ''.join(self.meta): - self.head.append( - '') - if self.math_header: - if self.math_output == 'mathjax': - self.head.extend(self.math_header) - else: - self.stylesheet.extend(self.math_header) - # skip content-type meta tag with interpolated charset value: - self.html_head.extend(self.head[1:]) - self.body_prefix.append(self.starttag(node, 'div', CLASS='document')) - self.body_suffix.insert(0, '\n') - self.fragment.extend(self.body) # self.fragment is the "naked" body - self.html_body.extend(self.body_prefix[1:] + self.body_pre_docinfo - + self.docinfo + self.body - + self.body_suffix[:-1]) - assert not self.context, 'len(context) = %s' % len(self.context) - - def visit_emphasis(self, node): - self.body.append(self.starttag(node, 'em', '')) - - def depart_emphasis(self, node): - self.body.append('') - - def visit_entry(self, node): - atts = {'class': []} - if isinstance(node.parent.parent, nodes.thead): - atts['class'].append('head') - if node.parent.parent.parent.stubs[node.parent.column]: - # "stubs" list is an attribute of the tgroup element - atts['class'].append('stub') - if atts['class']: - tagname = 'th' - atts['class'] = ' '.join(atts['class']) - else: - tagname = 'td' - del atts['class'] - node.parent.column += 1 - if 'morerows' in node: - atts['rowspan'] = node['morerows'] + 1 - if 'morecols' in node: - atts['colspan'] = node['morecols'] + 1 - node.parent.column += node['morecols'] - self.body.append(self.starttag(node, tagname, '', **atts)) - self.context.append('\n' % tagname.lower()) - # TODO: why does the html4css1 writer insert an NBSP into empty cells? - # if len(node) == 0: # empty cell - # self.body.append(' ') # no-break space - - def depart_entry(self, node): - self.body.append(self.context.pop()) - - def visit_enumerated_list(self, node): - atts = {} - if 'start' in node: - atts['start'] = node['start'] - if 'enumtype' in node: - atts['class'] = node['enumtype'] - if self.is_compactable(node): - atts['class'] = (atts.get('class', '') + ' simple').strip() - self.body.append(self.starttag(node, 'ol', **atts)) - - def depart_enumerated_list(self, node): - self.body.append('\n') - - def visit_field_list(self, node): - # Keep simple paragraphs in the field_body to enable CSS - # rule to start body on new line if the label is too long - classes = 'field-list' - if (self.is_compactable(node)): - classes += ' simple' - self.body.append(self.starttag(node, 'dl', CLASS=classes)) - - def depart_field_list(self, node): - self.body.append('\n') - - def visit_field(self, node): - pass - - def depart_field(self, node): - pass - - # as field is ignored, pass class arguments to field-name and field-body: - - def visit_field_name(self, node): - self.body.append(self.starttag(node, 'dt', '', - CLASS=''.join(node.parent['classes']))) - - def depart_field_name(self, node): - self.body.append('\n') - - def visit_field_body(self, node): - self.body.append(self.starttag(node, 'dd', '', - CLASS=''.join(node.parent['classes']))) - # prevent misalignment of following content if the field is empty: - if not node.children: - self.body.append('

') - - def depart_field_body(self, node): - self.body.append('\n') - - def visit_figure(self, node): - atts = {'class': 'figure'} - if node.get('width'): - atts['style'] = 'width: %s' % node['width'] - if node.get('align'): - atts['class'] += " align-" + node['align'] - self.body.append(self.starttag(node, 'div', **atts)) - - def depart_figure(self, node): - self.body.append('\n') - - # use HTML 5
element? - def visit_footer(self, node): - self.context.append(len(self.body)) - - def depart_footer(self, node): - start = self.context.pop() - footer = [self.starttag(node, 'div', CLASS='footer'), - '\n'] - footer.extend(self.body[start:]) - footer.append('\n\n') - self.footer.extend(footer) - self.body_suffix[:0] = footer - del self.body[start:] - - # footnotes - # --------- - # use definition list instead of table for footnote text - - # TODO: use the new HTML5 element

\n' - self.in_document_title = len(self.body) - else: - assert isinstance(node.parent, nodes.section) - h_level = self.section_level + self.initial_header_level - 1 - atts = {} - if (len(node.parent) >= 2 and - isinstance(node.parent[1], nodes.subtitle)): - atts['CLASS'] = 'with-subtitle' - self.body.append( - self.starttag(node, 'h%s' % h_level, '', **atts)) - atts = {} - if node.hasattr('refid'): - atts['class'] = 'toc-backref' - atts['href'] = '#' + node['refid'] - if atts: - self.body.append(self.starttag({}, 'a', '', **atts)) - close_tag = '\n' % (h_level) - else: - close_tag = '\n' % (h_level) - self.context.append(close_tag) - - def depart_title(self, node): - self.body.append(self.context.pop()) - if self.in_document_title: - self.title = self.body[self.in_document_title:-1] - self.in_document_title = 0 - self.body_pre_docinfo.extend(self.body) - self.html_title.extend(self.body) - del self.body[:] - - def visit_title_reference(self, node): - self.body.append(self.starttag(node, 'cite', '')) - - def depart_title_reference(self, node): - self.body.append('') - - # TODO: use the new HTML5 element