diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 0000000..a444deb --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,27 @@ +# Format and labels used aim to match those used by Ansible project +categories: + - title: 'Major Changes' + labels: + - 'major' # c6476b + - title: 'Minor Changes' + labels: + - 'feature' # 006b75 + - 'enhancement' # ededed + - 'performance' # 555555 + - title: 'Bugfixes' + labels: + - 'fix' + - 'bugfix' + - 'bug' # fbca04 + - 'docs' # 4071a5 + - 'packaging' # 4071a5 + - 'test' # #0e8a16 + - title: 'Deprecations' + labels: + - 'deprecated' # fef2c0 +exclude-labels: + - 'skip-changelog' +template: | + ## Changes + + $CHANGES diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml new file mode 100644 index 0000000..7d3004a --- /dev/null +++ b/.github/workflows/release-drafter.yml @@ -0,0 +1,18 @@ +name: Release Drafter + +on: + push: + # branches to consider in the event; optional, defaults to all + branches: + - master + - 'releases/**' + - 'stable/**' + +jobs: + update_release_draft: + runs-on: ubuntu-latest + steps: + # Drafts your next Release notes as Pull Requests are merged into "master" + - uses: release-drafter/release-drafter@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml new file mode 100644 index 0000000..389f369 --- /dev/null +++ b/.github/workflows/tox.yml @@ -0,0 +1,124 @@ +name: tox + +on: + create: # is used for publishing to PyPI and TestPyPI + tags: # any tag regardless of its name, no branches + push: # only publishes pushes to the main branch to TestPyPI + branches: # any integration branch but not tag + - "master" + - "main" + - "develop" + tags-ignore: + - "**" + pull_request: + schedule: + - cron: 1 0 * * * # Run daily at 0:01 UTC + +jobs: + build: + name: ${{ matrix.tox_env }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - tox_env: lint + - tox_env: py36 + - tox_env: py37 + - tox_env: py38 + - tox_env: py39 + - tox_env: packaging + steps: + - uses: actions/checkout@v1 + - name: Find python version + id: py_ver + shell: python + if: ${{ contains(matrix.tox_env, 'py') }} + run: | + v = '${{ matrix.tox_env }}'.split('-')[0].lstrip('py') + print('::set-output name=version::{0}.{1}'.format(v[0],v[1:])) + # Even our lint and other envs need access to tox + - name: Install a default Python + uses: actions/setup-python@v2 + if: ${{ ! contains(matrix.tox_env, 'py') }} + # Be sure to install the version of python needed by a specific test, if necessary + - name: Set up Python version + uses: actions/setup-python@v2 + if: ${{ contains(matrix.tox_env, 'py') }} + with: + python-version: ${{ steps.py_ver.outputs.version }} + - name: Install dependencies + run: | + python -m pip install -U pip + pip install tox + - name: Run tox -e ${{ matrix.tox_env }} + run: | + echo "${{ matrix.PREFIX }} tox -e ${{ matrix.tox_env }}" + ${{ matrix.PREFIX }} tox -e ${{ matrix.tox_env }} + + publish: + name: Publish to PyPI registry + needs: + - build + runs-on: ubuntu-latest + + env: + PY_COLORS: 1 + TOXENV: packaging + + steps: + - name: Switch to using Python 3.6 by default + uses: actions/setup-python@v2 + with: + python-version: 3.6 + - name: Install tox + run: python -m pip install --user tox + - name: Check out src from Git + uses: actions/checkout@v2 + with: + # Get shallow Git history (default) for tag creation events + # but have a complete clone for any other workflows. + # Both options fetch tags but since we're going to remove + # one from HEAD in non-create-tag workflows, we need full + # history for them. + fetch-depth: >- + ${{ + ( + github.event_name == 'create' && + github.event.ref_type == 'tag' + ) && + 1 || 0 + }} + - name: Drop Git tags from HEAD for non-tag-create events + if: >- + github.event_name != 'create' || + github.event.ref_type != 'tag' + run: >- + git tag --points-at HEAD + | + xargs git tag --delete + - name: Build dists + run: python -m tox + - name: Publish to test.pypi.org + if: >- + ( + github.event_name == 'push' && + github.ref == format( + 'refs/heads/{0}', github.event.repository.default_branch + ) + ) || + ( + github.event_name == 'create' && + github.event.ref_type == 'tag' + ) + uses: pypa/gh-action-pypi-publish@master + with: + password: ${{ secrets.testpypi_password }} + repository_url: https://test.pypi.org/legacy/ + - name: Publish to pypi.org + if: >- # "create" workflows run separately from "push" & "pull_request" + github.event_name == 'create' && + github.event.ref_type == 'tag' + uses: pypa/gh-action-pypi-publish@master + with: + password: ${{ secrets.pypi_password }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..214d3b5 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,39 @@ +--- +repos: + - repo: https://github.com/PyCQA/isort + rev: 5.6.4 + hooks: + - id: isort + - repo: https://github.com/python/black.git + rev: 20.8b1 + hooks: + - id: black + language_version: python3 + - repo: https://github.com/pre-commit/pre-commit-hooks.git + rev: v3.2.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace + - id: mixed-line-ending + - id: check-byte-order-marker + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: debug-statements + language_version: python3 + - repo: https://gitlab.com/pycqa/flake8.git + rev: 3.8.4 + hooks: + - id: flake8 + additional_dependencies: + - pydocstyle>=5.1.1 + - flake8-absolute-import + - flake8-black>=0.1.1 + - flake8-docstrings>=1.5.0 + language_version: python3 + - repo: https://github.com/pre-commit/mirrors-pylint + rev: v2.6.0 + hooks: + - id: pylint + additional_dependencies: + - ansible-base + - testinfra diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..455ad61 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,29 @@ +[MESSAGES CONTROL] + +disable = + # TODO(ssbarnea): remove temporary skips adding during initial adoption: + attribute-defined-outside-init, + consider-using-dict-comprehension, + consider-using-enumerate, + deprecated-module, + import-error, + invalid-name, + line-too-long, + missing-class-docstring, + missing-function-docstring, + missing-module-docstring, + no-self-use, + redefined-builtin, + redefined-outer-name, + too-few-public-methods, + too-many-arguments, + too-many-branches, + too-many-instance-attributes, + too-many-locals, + too-many-public-methods, + too-many-statements, + unused-argument, + unused-variable, + +[REPORTS] +output-format = colorized diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3caaf7d..0000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: python -python: - - "2.7" - - "3.5" - - "3.6" -install: -- python setup.py develop -- pip install nose mock -script: nosetests -x tests/*.py -notifications: - email: true - irc: - - "irc.freenode.net#threebean" - on_success: change - on_failure: always diff --git a/README.rst b/README.rst index 0f74ca5..6a9ff3b 100644 --- a/README.rst +++ b/README.rst @@ -16,13 +16,13 @@ Inspired by and developed off of the work of `pixelbeat`_ and `blackjack`_. Build Status ------------ -.. |master| image:: https://secure.travis-ci.org/ralphbean/ansi2html.png?branch=master +.. |master| image:: https://github.com/pycontribs/ansi2html/workflows/tox/badge.svg?branch=master :alt: Build Status - master branch - :target: http://travis-ci.org/#!/ralphbean/ansi2html + :target: https://github.com/pycontribs/ansi2html/actions?query=workflow%3Atox+branch%3Amaster -.. |develop| image:: https://secure.travis-ci.org/ralphbean/ansi2html.png?branch=develop +.. |develop| image:: https://github.com/pycontribs/ansi2html/workflows/tox/badge.svg?branch=develop :alt: Build Status - develop branch - :target: http://travis-ci.org/#!/ralphbean/ansi2html + :target: https://github.com/pycontribs/ansi2html/actions?query=workflow%3Atox+branch%3Adevelop +----------+-----------+ | Branch | Status | diff --git a/ansi2html/__init__.py b/ansi2html/__init__.py index 58250b8..db1f4fd 100644 --- a/ansi2html/__init__.py +++ b/ansi2html/__init__.py @@ -1,2 +1,3 @@ from ansi2html.converter import Ansi2HTMLConverter -__all__ = ['Ansi2HTMLConverter'] + +__all__ = ["Ansi2HTMLConverter"] diff --git a/ansi2html/__main__.py b/ansi2html/__main__.py new file mode 100644 index 0000000..4cbddc4 --- /dev/null +++ b/ansi2html/__main__.py @@ -0,0 +1,4 @@ +from ansi2html.converter import main + +if __name__ == "__main__": + main() diff --git a/ansi2html/converter.py b/ansi2html/converter.py old mode 100755 new mode 100644 index 33ddac2..5f75796 --- a/ansi2html/converter.py +++ b/ansi2html/converter.py @@ -20,22 +20,19 @@ # along with this program. If not, see # . +import io +import optparse import re import sys -import optparse + import pkg_resources -import io try: from collections import OrderedDict except ImportError: from ordereddict import OrderedDict -from ansi2html.style import get_styles, SCHEME -import six -from six.moves import map -from six.moves import zip - +from ansi2html.style import SCHEME, get_styles ANSI_FULL_RESET = 0 ANSI_INTENSITY_INCREASED = 1 @@ -68,21 +65,21 @@ ANSI_BACKGROUND_HIGH_INTENSITY_MAX = 107 VT100_BOX_CODES = { - '0x71': '─', - '0x74': '├', - '0x75': '┤', - '0x76': '┴', - '0x77': '┬', - '0x78': '│', - '0x6a': '┘', - '0x6b': '┐', - '0x6c': '┌', - '0x6d': '└', - '0x6e': '┼' + "0x71": "─", + "0x74": "├", + "0x75": "┤", + "0x76": "┴", + "0x77": "┬", + "0x78": "│", + "0x6a": "┘", + "0x6b": "┐", + "0x6c": "┌", + "0x6d": "└", + "0x6e": "┼", } # http://stackoverflow.com/a/15190498 -_latex_template = '''\\documentclass{scrartcl} +_latex_template = """\\documentclass{scrartcl} \\usepackage[utf8]{inputenc} \\usepackage{fancyvrb} \\usepackage[usenames,dvipsnames]{xcolor} @@ -90,7 +87,7 @@ \\title{%(title)s} -\\fvset{commandchars=\\\\\\{\}} +\\fvset{commandchars=\\\\\\{\\}} \\begin{document} @@ -98,9 +95,9 @@ %(content)s \\end{Verbatim} \\end{document} -''' +""" -_html_template = six.u(""" +_html_template = """ @@ -114,9 +111,10 @@ -""") +""" -class _State(object): + +class _State: def __init__(self): self.reset() @@ -132,7 +130,11 @@ def reset(self): self.negative = ANSI_NEGATIVE_OFF def adjust(self, ansi_code, parameter=None): - if ansi_code in (ANSI_INTENSITY_INCREASED, ANSI_INTENSITY_REDUCED, ANSI_INTENSITY_NORMAL): + if ansi_code in ( + ANSI_INTENSITY_INCREASED, + ANSI_INTENSITY_REDUCED, + ANSI_INTENSITY_NORMAL, + ): self.intensity = ansi_code elif ansi_code in (ANSI_STYLE_ITALIC, ANSI_STYLE_NORMAL): self.style = ansi_code @@ -146,7 +148,11 @@ def adjust(self, ansi_code, parameter=None): self.visibility = ansi_code elif ANSI_FOREGROUND_CUSTOM_MIN <= ansi_code <= ANSI_FOREGROUND_CUSTOM_MAX: self.foreground = (ansi_code, None) - elif ANSI_FOREGROUND_HIGH_INTENSITY_MIN <= ansi_code <= ANSI_FOREGROUND_HIGH_INTENSITY_MAX: + elif ( + ANSI_FOREGROUND_HIGH_INTENSITY_MIN + <= ansi_code + <= ANSI_FOREGROUND_HIGH_INTENSITY_MAX + ): self.foreground = (ansi_code, None) elif ansi_code == ANSI_FOREGROUND_256: self.foreground = (ansi_code, parameter) @@ -154,7 +160,11 @@ def adjust(self, ansi_code, parameter=None): self.foreground = (ansi_code, None) elif ANSI_BACKGROUND_CUSTOM_MIN <= ansi_code <= ANSI_BACKGROUND_CUSTOM_MAX: self.background = (ansi_code, None) - elif ANSI_BACKGROUND_HIGH_INTENSITY_MIN <= ansi_code <= ANSI_BACKGROUND_HIGH_INTENSITY_MAX: + elif ( + ANSI_BACKGROUND_HIGH_INTENSITY_MIN + <= ansi_code + <= ANSI_BACKGROUND_HIGH_INTENSITY_MAX + ): self.background = (ansi_code, None) elif ansi_code == ANSI_BACKGROUND_256: self.background = (ansi_code, parameter) @@ -168,16 +178,18 @@ def to_css_classes(self): def append_unless_default(output, value, default): if value != default: - css_class = 'ansi%d' % value + css_class = "ansi%d" % value output.append(css_class) - def append_color_unless_default(output, color, default, negative, neg_css_class): + def append_color_unless_default( + output, color, default, negative, neg_css_class + ): value, parameter = color if value != default: - prefix = 'inv' if negative else 'ansi' - css_class_index = str(value) \ - if (parameter is None) \ - else '%d-%d' % (value, parameter) + prefix = "inv" if negative else "ansi" + css_class_index = ( + str(value) if (parameter is None) else "%d-%d" % (value, parameter) + ) output.append(prefix + css_class_index) elif negative: output.append(neg_css_class) @@ -189,39 +201,53 @@ def append_color_unless_default(output, color, default, negative, neg_css_class) append_unless_default(css_classes, self.crossedout, ANSI_CROSSED_OUT_OFF) append_unless_default(css_classes, self.visibility, ANSI_VISIBILITY_ON) - flip_fore_and_background = (self.negative == ANSI_NEGATIVE_ON) - append_color_unless_default(css_classes, self.foreground, ANSI_FOREGROUND_DEFAULT, flip_fore_and_background, 'inv_background') - append_color_unless_default(css_classes, self.background, ANSI_BACKGROUND_DEFAULT, flip_fore_and_background, 'inv_foreground') + flip_fore_and_background = self.negative == ANSI_NEGATIVE_ON + append_color_unless_default( + css_classes, + self.foreground, + ANSI_FOREGROUND_DEFAULT, + flip_fore_and_background, + "inv_background", + ) + append_color_unless_default( + css_classes, + self.background, + ANSI_BACKGROUND_DEFAULT, + flip_fore_and_background, + "inv_foreground", + ) return css_classes def linkify(line, latex_mode): url_matcher = re.compile( - r'(((((https?|ftps?|gopher|telnet|nntp)://)|' - r'(mailto:|news:))(%[0-9A-Fa-f]{2}|[-()_.!~*' - r'\';/?:@&=+$,A-Za-z0-9])+)([).!\';/?:,][[:blank:]])?)') + r"(((((https?|ftps?|gopher|telnet|nntp)://)|" + r"(mailto:|news:))(%[0-9A-Fa-f]{2}|[-()_.!~*" + r"\';/?:@&=+$,A-Za-z0-9])+)([).!\';/?:,][\s])?)" + ) if latex_mode: - return url_matcher.sub(r'\\url{\1}', line) - else: - return url_matcher.sub(r'\1', line) + return url_matcher.sub(r"\\url{\1}", line) + return url_matcher.sub(r'\1', line) + def map_vt100_box_code(char): char_hex = hex(ord(char)) return VT100_BOX_CODES[char_hex] if char_hex in VT100_BOX_CODES else char + def _needs_extra_newline(text): - if not text or text.endswith('\n'): + if not text or text.endswith("\n"): return False return True -class CursorMoveUp(object): +class CursorMoveUp: pass -class Ansi2HTMLConverter(object): - """ Convert Ansi color codes to CSS+HTML +class Ansi2HTMLConverter: + """Convert Ansi color codes to CSS+HTML Example: >>> conv = Ansi2HTMLConverter() @@ -229,19 +255,20 @@ class Ansi2HTMLConverter(object): >>> html = conv.convert(ansi) """ - def __init__(self, - latex=False, - inline=False, - dark_bg=True, - line_wrap=True, - font_size='normal', - linkify=False, - escaped=True, - markup_lines=False, - output_encoding='utf-8', - scheme='ansi2html', - title='' - ): + def __init__( + self, + latex=False, + inline=False, + dark_bg=True, + line_wrap=True, + font_size="normal", + linkify=False, + escaped=True, + markup_lines=False, + output_encoding="utf-8", + scheme="ansi2html", + title="", + ): self.latex = latex self.inline = inline @@ -257,10 +284,15 @@ def __init__(self, self._attrs = None if inline: - self.styles = dict([(item.klass.strip('.'), item) for item in get_styles(self.dark_bg, self.line_wrap, self.scheme)]) + self.styles = dict( + [ + (item.klass.strip("."), item) + for item in get_styles(self.dark_bg, self.line_wrap, self.scheme) + ] + ) - self.vt100_box_codes_prog = re.compile('\033\\(([B0])') - self.ansi_codes_prog = re.compile('\033\\[' '([\\d;]*)' '([a-zA-z])') + self.vt100_box_codes_prog = re.compile("\033\\(([B0])") + self.ansi_codes_prog = re.compile("\033\\[" "([\\d;]*)" "([a-zA-z])") def apply_regex(self, ansi): styles_used = set() @@ -274,24 +306,29 @@ def apply_regex(self, ansi): combined = "".join(parts) if self.markup_lines and not self.latex: - combined = "\n".join([ - """%s""" % (i, line) - for i, line in enumerate(combined.split('\n')) - ]) + combined = "\n".join( + [ + """%s""" % (i, line) + for i, line in enumerate(combined.split("\n")) + ] + ) return combined, styles_used def _apply_regex(self, ansi, styles_used): if self.escaped: - if self.latex: # Known Perl function which does this: https://tex.stackexchange.com/questions/34580/escape-character-in-latex/119383#119383 - specials = OrderedDict([ - ]) + if ( + self.latex + ): # Known Perl function which does this: https://tex.stackexchange.com/questions/34580/escape-character-in-latex/119383#119383 + specials = OrderedDict([]) else: - specials = OrderedDict([ - ('&', '&'), - ('<', '<'), - ('>', '>'), - ]) + specials = OrderedDict( + [ + ("&", "&"), + ("<", "<"), + (">", ">"), + ] + ) for pattern, special in specials.items(): ansi = ansi.replace(pattern, special) @@ -299,36 +336,37 @@ def _vt100_box_drawing(): last_end = 0 # the index of the last end of a code we've seen box_drawing_mode = False for match in self.vt100_box_codes_prog.finditer(ansi): - trailer = ansi[last_end:match.start()] + trailer = ansi[last_end : match.start()] if box_drawing_mode: for char in trailer: yield map_vt100_box_code(char) else: yield trailer last_end = match.end() - box_drawing_mode = (match.groups()[0] == "0") + box_drawing_mode = match.groups()[0] == "0" yield ansi[last_end:] + ansi = "".join(_vt100_box_drawing()) state = _State() inside_span = False last_end = 0 # the index of the last end of a code we've seen for match in self.ansi_codes_prog.finditer(ansi): - yield ansi[last_end:match.start()] + yield ansi[last_end : match.start()] last_end = match.end() params, command = match.groups() - if command not in 'mMA': + if command not in "mMA": continue # Special cursor-moving code. The only supported one. - if command == 'A': + if command == "A": yield CursorMoveUp continue try: - params = list(map(int, params.split(';'))) + params = list(map(int, params.split(";"))) except ValueError: params = [ANSI_FULL_RESET] @@ -346,13 +384,13 @@ def _vt100_box_drawing(): # Process reset marker, drop everything before if last_null_index is not None: - params = params[last_null_index + 1:] + params = params[last_null_index + 1 :] if inside_span: inside_span = False if self.latex: - yield '}' + yield "}" else: - yield '' + yield "" state.reset() if not params: @@ -376,9 +414,9 @@ def _vt100_box_drawing(): if inside_span: if self.latex: - yield '}' + yield "}" else: - yield '' + yield "" inside_span = False css_classes = state.to_css_classes() @@ -388,16 +426,22 @@ def _vt100_box_drawing(): if self.inline: if self.latex: - style = [self.styles[klass].kwl[0][1] for klass in css_classes if - self.styles[klass].kwl[0][0] == 'color'] - yield '\\textcolor[HTML]{%s}{' % style[0] + style = [ + self.styles[klass].kwl[0][1] + for klass in css_classes + if self.styles[klass].kwl[0][0] == "color" + ] + yield "\\textcolor[HTML]{%s}{" % style[0] else: - style = [self.styles[klass].kw for klass in css_classes if - klass in self.styles] + style = [ + self.styles[klass].kw + for klass in css_classes + if klass in self.styles + ] yield '' % "; ".join(style) else: if self.latex: - yield '\\textcolor{%s}{' % " ".join(css_classes) + yield "\\textcolor{%s}{" % " ".join(css_classes) else: yield '' % " ".join(css_classes) inside_span = True @@ -405,9 +449,9 @@ def _vt100_box_drawing(): yield ansi[last_end:] if inside_span: if self.latex: - yield '}' + yield "}" else: - yield '' + yield "" inside_span = False def _collapse_cursor(self, parts): @@ -425,7 +469,7 @@ def _collapse_cursor(self, parts): if final_parts: final_parts.pop() - while final_parts and '\n' not in final_parts[-1]: + while final_parts and "\n" not in final_parts[-1]: final_parts.pop() continue @@ -435,20 +479,20 @@ def _collapse_cursor(self, parts): return final_parts - def prepare(self, ansi='', ensure_trailing_newline=False): + def prepare(self, ansi="", ensure_trailing_newline=False): """ Load the contents of 'ansi' into this object """ body, styles = self.apply_regex(ansi) if ensure_trailing_newline and _needs_extra_newline(body): - body += '\n' + body += "\n" self._attrs = { - 'dark_bg': self.dark_bg, - 'line_wrap': self.line_wrap, - 'font_size': self.font_size, - 'body': body, - 'styles': styles, + "dark_bg": self.dark_bg, + "line_wrap": self.line_wrap, + "font_size": self.font_size, + "body": body, + "styles": styles, } return self._attrs @@ -463,26 +507,29 @@ def convert(self, ansi, full=True, ensure_trailing_newline=False): attrs = self.prepare(ansi, ensure_trailing_newline=ensure_trailing_newline) if not full: return attrs["body"] + if self.latex: + _template = _latex_template else: - if self.latex: - _template = _latex_template - else: - _template = _html_template - all_styles = get_styles(self.dark_bg, self.line_wrap, self.scheme) - backgrounds = all_styles[:6] - used_styles = filter(lambda e: e.klass.lstrip(".") in attrs["styles"], all_styles) - - return _template % { - 'style' : "\n".join(list(map(str, backgrounds + list(used_styles)))), - 'title' : self.title, - 'font_size' : self.font_size, - 'content' : attrs["body"], - 'output_encoding' : self.output_encoding, - } + _template = _html_template + all_styles = get_styles(self.dark_bg, self.line_wrap, self.scheme) + backgrounds = all_styles[:6] + used_styles = filter( + lambda e: e.klass.lstrip(".") in attrs["styles"], all_styles + ) + + return _template % { + "style": "\n".join(list(map(str, backgrounds + list(used_styles)))), + "title": self.title, + "font_size": self.font_size, + "content": attrs["body"], + "output_encoding": self.output_encoding, + } def produce_headers(self): return '\n' % { - 'style' : "\n".join(map(str, get_styles(self.dark_bg, self.line_wrap, self.scheme))) + "style": "\n".join( + map(str, get_styles(self.dark_bg, self.line_wrap, self.scheme)) + ) } @@ -493,68 +540,120 @@ def main(): $ task burndown | ansi2html > burndown.html """ - scheme_names = sorted(six.iterkeys(SCHEME)) - version_str = pkg_resources.get_distribution('ansi2html').version + scheme_names = sorted(SCHEME.keys()) + version_str = pkg_resources.get_distribution("ansi2html").version parser = optparse.OptionParser( - usage=main.__doc__, - version="%%prog %s" % version_str) + usage=main.__doc__, version="%%prog %s" % version_str + ) parser.add_option( - "-p", "--partial", dest="partial", - default=False, action="store_true", - help="Process lines as them come in. No headers are produced.") + "-p", + "--partial", + dest="partial", + default=False, + action="store_true", + help="Process lines as them come in. No headers are produced.", + ) parser.add_option( - "-L", "--latex", dest="latex", - default=False, action="store_true", - help="Export as LaTeX instead of HTML.") + "-L", + "--latex", + dest="latex", + default=False, + action="store_true", + help="Export as LaTeX instead of HTML.", + ) parser.add_option( - "-i", "--inline", dest="inline", - default=False, action="store_true", - help="Inline style without headers or template.") + "-i", + "--inline", + dest="inline", + default=False, + action="store_true", + help="Inline style without headers or template.", + ) parser.add_option( - "-H", "--headers", dest="headers", - default=False, action="store_true", - help="Just produce the @@ -69,6 +69,7 @@ Found 5 matches. + diff --git a/tests/ansicolor_eix.txt b/tests/ansicolor_eix.txt index 56fae3c..7d3423a 100644 --- a/tests/ansicolor_eix.txt +++ b/tests/ansicolor_eix.txt @@ -31,4 +31,4 @@ [1] "betagarden" /home/sping/__playground/betagarden Found 5 matches. - \ No newline at end of file + diff --git a/tests/produce_headers.txt b/tests/produce_headers.txt index d2cf73c..b4eabfc 100644 --- a/tests/produce_headers.txt +++ b/tests/produce_headers.txt @@ -145,866 +145,866 @@ .inv38-16 { background: #000000; } .ansi48-16 { background: #000000; } .inv48-16 { color: #000000; } -.ansi38-17 { color: #00002a; } -.inv38-17 { background: #00002a; } -.ansi48-17 { background: #00002a; } -.inv48-17 { color: #00002a; } -.ansi38-18 { color: #000054; } -.inv38-18 { background: #000054; } -.ansi48-18 { background: #000054; } -.inv48-18 { color: #000054; } -.ansi38-19 { color: #00007e; } -.inv38-19 { background: #00007e; } -.ansi48-19 { background: #00007e; } -.inv48-19 { color: #00007e; } -.ansi38-20 { color: #0000a8; } -.inv38-20 { background: #0000a8; } -.ansi48-20 { background: #0000a8; } -.inv48-20 { color: #0000a8; } -.ansi38-21 { color: #0000d2; } -.inv38-21 { background: #0000d2; } -.ansi48-21 { background: #0000d2; } -.inv48-21 { color: #0000d2; } -.ansi38-52 { color: #2a0000; } -.inv38-52 { background: #2a0000; } -.ansi48-52 { background: #2a0000; } -.inv48-52 { color: #2a0000; } -.ansi38-53 { color: #2a002a; } -.inv38-53 { background: #2a002a; } -.ansi48-53 { background: #2a002a; } -.inv48-53 { color: #2a002a; } -.ansi38-54 { color: #2a0054; } -.inv38-54 { background: #2a0054; } -.ansi48-54 { background: #2a0054; } -.inv48-54 { color: #2a0054; } -.ansi38-55 { color: #2a007e; } -.inv38-55 { background: #2a007e; } -.ansi48-55 { background: #2a007e; } -.inv48-55 { color: #2a007e; } -.ansi38-56 { color: #2a00a8; } -.inv38-56 { background: #2a00a8; } -.ansi48-56 { background: #2a00a8; } -.inv48-56 { color: #2a00a8; } -.ansi38-57 { color: #2a00d2; } -.inv38-57 { background: #2a00d2; } -.ansi48-57 { background: #2a00d2; } -.inv48-57 { color: #2a00d2; } -.ansi38-88 { color: #540000; } -.inv38-88 { background: #540000; } -.ansi48-88 { background: #540000; } -.inv48-88 { color: #540000; } -.ansi38-89 { color: #54002a; } -.inv38-89 { background: #54002a; } -.ansi48-89 { background: #54002a; } -.inv48-89 { color: #54002a; } -.ansi38-90 { color: #540054; } -.inv38-90 { background: #540054; } -.ansi48-90 { background: #540054; } -.inv48-90 { color: #540054; } -.ansi38-91 { color: #54007e; } -.inv38-91 { background: #54007e; } -.ansi48-91 { background: #54007e; } -.inv48-91 { color: #54007e; } -.ansi38-92 { color: #5400a8; } -.inv38-92 { background: #5400a8; } -.ansi48-92 { background: #5400a8; } -.inv48-92 { color: #5400a8; } -.ansi38-93 { color: #5400d2; } -.inv38-93 { background: #5400d2; } -.ansi48-93 { background: #5400d2; } -.inv48-93 { color: #5400d2; } -.ansi38-124 { color: #7e0000; } -.inv38-124 { background: #7e0000; } -.ansi48-124 { background: #7e0000; } -.inv48-124 { color: #7e0000; } -.ansi38-125 { color: #7e002a; } -.inv38-125 { background: #7e002a; } -.ansi48-125 { background: #7e002a; } -.inv48-125 { color: #7e002a; } -.ansi38-126 { color: #7e0054; } -.inv38-126 { background: #7e0054; } -.ansi48-126 { background: #7e0054; } -.inv48-126 { color: #7e0054; } -.ansi38-127 { color: #7e007e; } -.inv38-127 { background: #7e007e; } -.ansi48-127 { background: #7e007e; } -.inv48-127 { color: #7e007e; } -.ansi38-128 { color: #7e00a8; } -.inv38-128 { background: #7e00a8; } -.ansi48-128 { background: #7e00a8; } -.inv48-128 { color: #7e00a8; } -.ansi38-129 { color: #7e00d2; } -.inv38-129 { background: #7e00d2; } -.ansi48-129 { background: #7e00d2; } -.inv48-129 { color: #7e00d2; } -.ansi38-160 { color: #a80000; } -.inv38-160 { background: #a80000; } -.ansi48-160 { background: #a80000; } -.inv48-160 { color: #a80000; } -.ansi38-161 { color: #a8002a; } -.inv38-161 { background: #a8002a; } -.ansi48-161 { background: #a8002a; } -.inv48-161 { color: #a8002a; } -.ansi38-162 { color: #a80054; } -.inv38-162 { background: #a80054; } -.ansi48-162 { background: #a80054; } -.inv48-162 { color: #a80054; } -.ansi38-163 { color: #a8007e; } -.inv38-163 { background: #a8007e; } -.ansi48-163 { background: #a8007e; } -.inv48-163 { color: #a8007e; } -.ansi38-164 { color: #a800a8; } -.inv38-164 { background: #a800a8; } -.ansi48-164 { background: #a800a8; } -.inv48-164 { color: #a800a8; } -.ansi38-165 { color: #a800d2; } -.inv38-165 { background: #a800d2; } -.ansi48-165 { background: #a800d2; } -.inv48-165 { color: #a800d2; } -.ansi38-196 { color: #d20000; } -.inv38-196 { background: #d20000; } -.ansi48-196 { background: #d20000; } -.inv48-196 { color: #d20000; } -.ansi38-197 { color: #d2002a; } -.inv38-197 { background: #d2002a; } -.ansi48-197 { background: #d2002a; } -.inv48-197 { color: #d2002a; } -.ansi38-198 { color: #d20054; } -.inv38-198 { background: #d20054; } -.ansi48-198 { background: #d20054; } -.inv48-198 { color: #d20054; } -.ansi38-199 { color: #d2007e; } -.inv38-199 { background: #d2007e; } -.ansi48-199 { background: #d2007e; } -.inv48-199 { color: #d2007e; } -.ansi38-200 { color: #d200a8; } -.inv38-200 { background: #d200a8; } -.ansi48-200 { background: #d200a8; } -.inv48-200 { color: #d200a8; } -.ansi38-201 { color: #d200d2; } -.inv38-201 { background: #d200d2; } -.ansi48-201 { background: #d200d2; } -.inv48-201 { color: #d200d2; } -.ansi38-22 { color: #002a00; } -.inv38-22 { background: #002a00; } -.ansi48-22 { background: #002a00; } -.inv48-22 { color: #002a00; } -.ansi38-23 { color: #002a2a; } -.inv38-23 { background: #002a2a; } -.ansi48-23 { background: #002a2a; } -.inv48-23 { color: #002a2a; } -.ansi38-24 { color: #002a54; } -.inv38-24 { background: #002a54; } -.ansi48-24 { background: #002a54; } -.inv48-24 { color: #002a54; } -.ansi38-25 { color: #002a7e; } -.inv38-25 { background: #002a7e; } -.ansi48-25 { background: #002a7e; } -.inv48-25 { color: #002a7e; } -.ansi38-26 { color: #002aa8; } -.inv38-26 { background: #002aa8; } -.ansi48-26 { background: #002aa8; } -.inv48-26 { color: #002aa8; } -.ansi38-27 { color: #002ad2; } -.inv38-27 { background: #002ad2; } -.ansi48-27 { background: #002ad2; } -.inv48-27 { color: #002ad2; } -.ansi38-58 { color: #2a2a00; } -.inv38-58 { background: #2a2a00; } -.ansi48-58 { background: #2a2a00; } -.inv48-58 { color: #2a2a00; } -.ansi38-59 { color: #2a2a2a; } -.inv38-59 { background: #2a2a2a; } -.ansi48-59 { background: #2a2a2a; } -.inv48-59 { color: #2a2a2a; } -.ansi38-60 { color: #2a2a54; } -.inv38-60 { background: #2a2a54; } -.ansi48-60 { background: #2a2a54; } -.inv48-60 { color: #2a2a54; } -.ansi38-61 { color: #2a2a7e; } -.inv38-61 { background: #2a2a7e; } -.ansi48-61 { background: #2a2a7e; } -.inv48-61 { color: #2a2a7e; } -.ansi38-62 { color: #2a2aa8; } -.inv38-62 { background: #2a2aa8; } -.ansi48-62 { background: #2a2aa8; } -.inv48-62 { color: #2a2aa8; } -.ansi38-63 { color: #2a2ad2; } -.inv38-63 { background: #2a2ad2; } -.ansi48-63 { background: #2a2ad2; } -.inv48-63 { color: #2a2ad2; } -.ansi38-94 { color: #542a00; } -.inv38-94 { background: #542a00; } -.ansi48-94 { background: #542a00; } -.inv48-94 { color: #542a00; } -.ansi38-95 { color: #542a2a; } -.inv38-95 { background: #542a2a; } -.ansi48-95 { background: #542a2a; } -.inv48-95 { color: #542a2a; } -.ansi38-96 { color: #542a54; } -.inv38-96 { background: #542a54; } -.ansi48-96 { background: #542a54; } -.inv48-96 { color: #542a54; } -.ansi38-97 { color: #542a7e; } -.inv38-97 { background: #542a7e; } -.ansi48-97 { background: #542a7e; } -.inv48-97 { color: #542a7e; } -.ansi38-98 { color: #542aa8; } -.inv38-98 { background: #542aa8; } -.ansi48-98 { background: #542aa8; } -.inv48-98 { color: #542aa8; } -.ansi38-99 { color: #542ad2; } -.inv38-99 { background: #542ad2; } -.ansi48-99 { background: #542ad2; } -.inv48-99 { color: #542ad2; } -.ansi38-130 { color: #7e2a00; } -.inv38-130 { background: #7e2a00; } -.ansi48-130 { background: #7e2a00; } -.inv48-130 { color: #7e2a00; } -.ansi38-131 { color: #7e2a2a; } -.inv38-131 { background: #7e2a2a; } -.ansi48-131 { background: #7e2a2a; } -.inv48-131 { color: #7e2a2a; } -.ansi38-132 { color: #7e2a54; } -.inv38-132 { background: #7e2a54; } -.ansi48-132 { background: #7e2a54; } -.inv48-132 { color: #7e2a54; } -.ansi38-133 { color: #7e2a7e; } -.inv38-133 { background: #7e2a7e; } -.ansi48-133 { background: #7e2a7e; } -.inv48-133 { color: #7e2a7e; } -.ansi38-134 { color: #7e2aa8; } -.inv38-134 { background: #7e2aa8; } -.ansi48-134 { background: #7e2aa8; } -.inv48-134 { color: #7e2aa8; } -.ansi38-135 { color: #7e2ad2; } -.inv38-135 { background: #7e2ad2; } -.ansi48-135 { background: #7e2ad2; } -.inv48-135 { color: #7e2ad2; } -.ansi38-166 { color: #a82a00; } -.inv38-166 { background: #a82a00; } -.ansi48-166 { background: #a82a00; } -.inv48-166 { color: #a82a00; } -.ansi38-167 { color: #a82a2a; } -.inv38-167 { background: #a82a2a; } -.ansi48-167 { background: #a82a2a; } -.inv48-167 { color: #a82a2a; } -.ansi38-168 { color: #a82a54; } -.inv38-168 { background: #a82a54; } -.ansi48-168 { background: #a82a54; } -.inv48-168 { color: #a82a54; } -.ansi38-169 { color: #a82a7e; } -.inv38-169 { background: #a82a7e; } -.ansi48-169 { background: #a82a7e; } -.inv48-169 { color: #a82a7e; } -.ansi38-170 { color: #a82aa8; } -.inv38-170 { background: #a82aa8; } -.ansi48-170 { background: #a82aa8; } -.inv48-170 { color: #a82aa8; } -.ansi38-171 { color: #a82ad2; } -.inv38-171 { background: #a82ad2; } -.ansi48-171 { background: #a82ad2; } -.inv48-171 { color: #a82ad2; } -.ansi38-202 { color: #d22a00; } -.inv38-202 { background: #d22a00; } -.ansi48-202 { background: #d22a00; } -.inv48-202 { color: #d22a00; } -.ansi38-203 { color: #d22a2a; } -.inv38-203 { background: #d22a2a; } -.ansi48-203 { background: #d22a2a; } -.inv48-203 { color: #d22a2a; } -.ansi38-204 { color: #d22a54; } -.inv38-204 { background: #d22a54; } -.ansi48-204 { background: #d22a54; } -.inv48-204 { color: #d22a54; } -.ansi38-205 { color: #d22a7e; } -.inv38-205 { background: #d22a7e; } -.ansi48-205 { background: #d22a7e; } -.inv48-205 { color: #d22a7e; } -.ansi38-206 { color: #d22aa8; } -.inv38-206 { background: #d22aa8; } -.ansi48-206 { background: #d22aa8; } -.inv48-206 { color: #d22aa8; } -.ansi38-207 { color: #d22ad2; } -.inv38-207 { background: #d22ad2; } -.ansi48-207 { background: #d22ad2; } -.inv48-207 { color: #d22ad2; } -.ansi38-28 { color: #005400; } -.inv38-28 { background: #005400; } -.ansi48-28 { background: #005400; } -.inv48-28 { color: #005400; } -.ansi38-29 { color: #00542a; } -.inv38-29 { background: #00542a; } -.ansi48-29 { background: #00542a; } -.inv48-29 { color: #00542a; } -.ansi38-30 { color: #005454; } -.inv38-30 { background: #005454; } -.ansi48-30 { background: #005454; } -.inv48-30 { color: #005454; } -.ansi38-31 { color: #00547e; } -.inv38-31 { background: #00547e; } -.ansi48-31 { background: #00547e; } -.inv48-31 { color: #00547e; } -.ansi38-32 { color: #0054a8; } -.inv38-32 { background: #0054a8; } -.ansi48-32 { background: #0054a8; } -.inv48-32 { color: #0054a8; } -.ansi38-33 { color: #0054d2; } -.inv38-33 { background: #0054d2; } -.ansi48-33 { background: #0054d2; } -.inv48-33 { color: #0054d2; } -.ansi38-64 { color: #2a5400; } -.inv38-64 { background: #2a5400; } -.ansi48-64 { background: #2a5400; } -.inv48-64 { color: #2a5400; } -.ansi38-65 { color: #2a542a; } -.inv38-65 { background: #2a542a; } -.ansi48-65 { background: #2a542a; } -.inv48-65 { color: #2a542a; } -.ansi38-66 { color: #2a5454; } -.inv38-66 { background: #2a5454; } -.ansi48-66 { background: #2a5454; } -.inv48-66 { color: #2a5454; } -.ansi38-67 { color: #2a547e; } -.inv38-67 { background: #2a547e; } -.ansi48-67 { background: #2a547e; } -.inv48-67 { color: #2a547e; } -.ansi38-68 { color: #2a54a8; } -.inv38-68 { background: #2a54a8; } -.ansi48-68 { background: #2a54a8; } -.inv48-68 { color: #2a54a8; } -.ansi38-69 { color: #2a54d2; } -.inv38-69 { background: #2a54d2; } -.ansi48-69 { background: #2a54d2; } -.inv48-69 { color: #2a54d2; } -.ansi38-100 { color: #545400; } -.inv38-100 { background: #545400; } -.ansi48-100 { background: #545400; } -.inv48-100 { color: #545400; } -.ansi38-101 { color: #54542a; } -.inv38-101 { background: #54542a; } -.ansi48-101 { background: #54542a; } -.inv48-101 { color: #54542a; } -.ansi38-102 { color: #545454; } -.inv38-102 { background: #545454; } -.ansi48-102 { background: #545454; } -.inv48-102 { color: #545454; } -.ansi38-103 { color: #54547e; } -.inv38-103 { background: #54547e; } -.ansi48-103 { background: #54547e; } -.inv48-103 { color: #54547e; } -.ansi38-104 { color: #5454a8; } -.inv38-104 { background: #5454a8; } -.ansi48-104 { background: #5454a8; } -.inv48-104 { color: #5454a8; } -.ansi38-105 { color: #5454d2; } -.inv38-105 { background: #5454d2; } -.ansi48-105 { background: #5454d2; } -.inv48-105 { color: #5454d2; } -.ansi38-136 { color: #7e5400; } -.inv38-136 { background: #7e5400; } -.ansi48-136 { background: #7e5400; } -.inv48-136 { color: #7e5400; } -.ansi38-137 { color: #7e542a; } -.inv38-137 { background: #7e542a; } -.ansi48-137 { background: #7e542a; } -.inv48-137 { color: #7e542a; } -.ansi38-138 { color: #7e5454; } -.inv38-138 { background: #7e5454; } -.ansi48-138 { background: #7e5454; } -.inv48-138 { color: #7e5454; } -.ansi38-139 { color: #7e547e; } -.inv38-139 { background: #7e547e; } -.ansi48-139 { background: #7e547e; } -.inv48-139 { color: #7e547e; } -.ansi38-140 { color: #7e54a8; } -.inv38-140 { background: #7e54a8; } -.ansi48-140 { background: #7e54a8; } -.inv48-140 { color: #7e54a8; } -.ansi38-141 { color: #7e54d2; } -.inv38-141 { background: #7e54d2; } -.ansi48-141 { background: #7e54d2; } -.inv48-141 { color: #7e54d2; } -.ansi38-172 { color: #a85400; } -.inv38-172 { background: #a85400; } -.ansi48-172 { background: #a85400; } -.inv48-172 { color: #a85400; } -.ansi38-173 { color: #a8542a; } -.inv38-173 { background: #a8542a; } -.ansi48-173 { background: #a8542a; } -.inv48-173 { color: #a8542a; } -.ansi38-174 { color: #a85454; } -.inv38-174 { background: #a85454; } -.ansi48-174 { background: #a85454; } -.inv48-174 { color: #a85454; } -.ansi38-175 { color: #a8547e; } -.inv38-175 { background: #a8547e; } -.ansi48-175 { background: #a8547e; } -.inv48-175 { color: #a8547e; } -.ansi38-176 { color: #a854a8; } -.inv38-176 { background: #a854a8; } -.ansi48-176 { background: #a854a8; } -.inv48-176 { color: #a854a8; } -.ansi38-177 { color: #a854d2; } -.inv38-177 { background: #a854d2; } -.ansi48-177 { background: #a854d2; } -.inv48-177 { color: #a854d2; } -.ansi38-208 { color: #d25400; } -.inv38-208 { background: #d25400; } -.ansi48-208 { background: #d25400; } -.inv48-208 { color: #d25400; } -.ansi38-209 { color: #d2542a; } -.inv38-209 { background: #d2542a; } -.ansi48-209 { background: #d2542a; } -.inv48-209 { color: #d2542a; } -.ansi38-210 { color: #d25454; } -.inv38-210 { background: #d25454; } -.ansi48-210 { background: #d25454; } -.inv48-210 { color: #d25454; } -.ansi38-211 { color: #d2547e; } -.inv38-211 { background: #d2547e; } -.ansi48-211 { background: #d2547e; } -.inv48-211 { color: #d2547e; } -.ansi38-212 { color: #d254a8; } -.inv38-212 { background: #d254a8; } -.ansi48-212 { background: #d254a8; } -.inv48-212 { color: #d254a8; } -.ansi38-213 { color: #d254d2; } -.inv38-213 { background: #d254d2; } -.ansi48-213 { background: #d254d2; } -.inv48-213 { color: #d254d2; } -.ansi38-34 { color: #007e00; } -.inv38-34 { background: #007e00; } -.ansi48-34 { background: #007e00; } -.inv48-34 { color: #007e00; } -.ansi38-35 { color: #007e2a; } -.inv38-35 { background: #007e2a; } -.ansi48-35 { background: #007e2a; } -.inv48-35 { color: #007e2a; } -.ansi38-36 { color: #007e54; } -.inv38-36 { background: #007e54; } -.ansi48-36 { background: #007e54; } -.inv48-36 { color: #007e54; } -.ansi38-37 { color: #007e7e; } -.inv38-37 { background: #007e7e; } -.ansi48-37 { background: #007e7e; } -.inv48-37 { color: #007e7e; } -.ansi38-38 { color: #007ea8; } -.inv38-38 { background: #007ea8; } -.ansi48-38 { background: #007ea8; } -.inv48-38 { color: #007ea8; } -.ansi38-39 { color: #007ed2; } -.inv38-39 { background: #007ed2; } -.ansi48-39 { background: #007ed2; } -.inv48-39 { color: #007ed2; } -.ansi38-70 { color: #2a7e00; } -.inv38-70 { background: #2a7e00; } -.ansi48-70 { background: #2a7e00; } -.inv48-70 { color: #2a7e00; } -.ansi38-71 { color: #2a7e2a; } -.inv38-71 { background: #2a7e2a; } -.ansi48-71 { background: #2a7e2a; } -.inv48-71 { color: #2a7e2a; } -.ansi38-72 { color: #2a7e54; } -.inv38-72 { background: #2a7e54; } -.ansi48-72 { background: #2a7e54; } -.inv48-72 { color: #2a7e54; } -.ansi38-73 { color: #2a7e7e; } -.inv38-73 { background: #2a7e7e; } -.ansi48-73 { background: #2a7e7e; } -.inv48-73 { color: #2a7e7e; } -.ansi38-74 { color: #2a7ea8; } -.inv38-74 { background: #2a7ea8; } -.ansi48-74 { background: #2a7ea8; } -.inv48-74 { color: #2a7ea8; } -.ansi38-75 { color: #2a7ed2; } -.inv38-75 { background: #2a7ed2; } -.ansi48-75 { background: #2a7ed2; } -.inv48-75 { color: #2a7ed2; } -.ansi38-106 { color: #547e00; } -.inv38-106 { background: #547e00; } -.ansi48-106 { background: #547e00; } -.inv48-106 { color: #547e00; } -.ansi38-107 { color: #547e2a; } -.inv38-107 { background: #547e2a; } -.ansi48-107 { background: #547e2a; } -.inv48-107 { color: #547e2a; } -.ansi38-108 { color: #547e54; } -.inv38-108 { background: #547e54; } -.ansi48-108 { background: #547e54; } -.inv48-108 { color: #547e54; } -.ansi38-109 { color: #547e7e; } -.inv38-109 { background: #547e7e; } -.ansi48-109 { background: #547e7e; } -.inv48-109 { color: #547e7e; } -.ansi38-110 { color: #547ea8; } -.inv38-110 { background: #547ea8; } -.ansi48-110 { background: #547ea8; } -.inv48-110 { color: #547ea8; } -.ansi38-111 { color: #547ed2; } -.inv38-111 { background: #547ed2; } -.ansi48-111 { background: #547ed2; } -.inv48-111 { color: #547ed2; } -.ansi38-142 { color: #7e7e00; } -.inv38-142 { background: #7e7e00; } -.ansi48-142 { background: #7e7e00; } -.inv48-142 { color: #7e7e00; } -.ansi38-143 { color: #7e7e2a; } -.inv38-143 { background: #7e7e2a; } -.ansi48-143 { background: #7e7e2a; } -.inv48-143 { color: #7e7e2a; } -.ansi38-144 { color: #7e7e54; } -.inv38-144 { background: #7e7e54; } -.ansi48-144 { background: #7e7e54; } -.inv48-144 { color: #7e7e54; } -.ansi38-145 { color: #7e7e7e; } -.inv38-145 { background: #7e7e7e; } -.ansi48-145 { background: #7e7e7e; } -.inv48-145 { color: #7e7e7e; } -.ansi38-146 { color: #7e7ea8; } -.inv38-146 { background: #7e7ea8; } -.ansi48-146 { background: #7e7ea8; } -.inv48-146 { color: #7e7ea8; } -.ansi38-147 { color: #7e7ed2; } -.inv38-147 { background: #7e7ed2; } -.ansi48-147 { background: #7e7ed2; } -.inv48-147 { color: #7e7ed2; } -.ansi38-178 { color: #a87e00; } -.inv38-178 { background: #a87e00; } -.ansi48-178 { background: #a87e00; } -.inv48-178 { color: #a87e00; } -.ansi38-179 { color: #a87e2a; } -.inv38-179 { background: #a87e2a; } -.ansi48-179 { background: #a87e2a; } -.inv48-179 { color: #a87e2a; } -.ansi38-180 { color: #a87e54; } -.inv38-180 { background: #a87e54; } -.ansi48-180 { background: #a87e54; } -.inv48-180 { color: #a87e54; } -.ansi38-181 { color: #a87e7e; } -.inv38-181 { background: #a87e7e; } -.ansi48-181 { background: #a87e7e; } -.inv48-181 { color: #a87e7e; } -.ansi38-182 { color: #a87ea8; } -.inv38-182 { background: #a87ea8; } -.ansi48-182 { background: #a87ea8; } -.inv48-182 { color: #a87ea8; } -.ansi38-183 { color: #a87ed2; } -.inv38-183 { background: #a87ed2; } -.ansi48-183 { background: #a87ed2; } -.inv48-183 { color: #a87ed2; } -.ansi38-214 { color: #d27e00; } -.inv38-214 { background: #d27e00; } -.ansi48-214 { background: #d27e00; } -.inv48-214 { color: #d27e00; } -.ansi38-215 { color: #d27e2a; } -.inv38-215 { background: #d27e2a; } -.ansi48-215 { background: #d27e2a; } -.inv48-215 { color: #d27e2a; } -.ansi38-216 { color: #d27e54; } -.inv38-216 { background: #d27e54; } -.ansi48-216 { background: #d27e54; } -.inv48-216 { color: #d27e54; } -.ansi38-217 { color: #d27e7e; } -.inv38-217 { background: #d27e7e; } -.ansi48-217 { background: #d27e7e; } -.inv48-217 { color: #d27e7e; } -.ansi38-218 { color: #d27ea8; } -.inv38-218 { background: #d27ea8; } -.ansi48-218 { background: #d27ea8; } -.inv48-218 { color: #d27ea8; } -.ansi38-219 { color: #d27ed2; } -.inv38-219 { background: #d27ed2; } -.ansi48-219 { background: #d27ed2; } -.inv48-219 { color: #d27ed2; } -.ansi38-40 { color: #00a800; } -.inv38-40 { background: #00a800; } -.ansi48-40 { background: #00a800; } -.inv48-40 { color: #00a800; } -.ansi38-41 { color: #00a82a; } -.inv38-41 { background: #00a82a; } -.ansi48-41 { background: #00a82a; } -.inv48-41 { color: #00a82a; } -.ansi38-42 { color: #00a854; } -.inv38-42 { background: #00a854; } -.ansi48-42 { background: #00a854; } -.inv48-42 { color: #00a854; } -.ansi38-43 { color: #00a87e; } -.inv38-43 { background: #00a87e; } -.ansi48-43 { background: #00a87e; } -.inv48-43 { color: #00a87e; } -.ansi38-44 { color: #00a8a8; } -.inv38-44 { background: #00a8a8; } -.ansi48-44 { background: #00a8a8; } -.inv48-44 { color: #00a8a8; } -.ansi38-45 { color: #00a8d2; } -.inv38-45 { background: #00a8d2; } -.ansi48-45 { background: #00a8d2; } -.inv48-45 { color: #00a8d2; } -.ansi38-76 { color: #2aa800; } -.inv38-76 { background: #2aa800; } -.ansi48-76 { background: #2aa800; } -.inv48-76 { color: #2aa800; } -.ansi38-77 { color: #2aa82a; } -.inv38-77 { background: #2aa82a; } -.ansi48-77 { background: #2aa82a; } -.inv48-77 { color: #2aa82a; } -.ansi38-78 { color: #2aa854; } -.inv38-78 { background: #2aa854; } -.ansi48-78 { background: #2aa854; } -.inv48-78 { color: #2aa854; } -.ansi38-79 { color: #2aa87e; } -.inv38-79 { background: #2aa87e; } -.ansi48-79 { background: #2aa87e; } -.inv48-79 { color: #2aa87e; } -.ansi38-80 { color: #2aa8a8; } -.inv38-80 { background: #2aa8a8; } -.ansi48-80 { background: #2aa8a8; } -.inv48-80 { color: #2aa8a8; } -.ansi38-81 { color: #2aa8d2; } -.inv38-81 { background: #2aa8d2; } -.ansi48-81 { background: #2aa8d2; } -.inv48-81 { color: #2aa8d2; } -.ansi38-112 { color: #54a800; } -.inv38-112 { background: #54a800; } -.ansi48-112 { background: #54a800; } -.inv48-112 { color: #54a800; } -.ansi38-113 { color: #54a82a; } -.inv38-113 { background: #54a82a; } -.ansi48-113 { background: #54a82a; } -.inv48-113 { color: #54a82a; } -.ansi38-114 { color: #54a854; } -.inv38-114 { background: #54a854; } -.ansi48-114 { background: #54a854; } -.inv48-114 { color: #54a854; } -.ansi38-115 { color: #54a87e; } -.inv38-115 { background: #54a87e; } -.ansi48-115 { background: #54a87e; } -.inv48-115 { color: #54a87e; } -.ansi38-116 { color: #54a8a8; } -.inv38-116 { background: #54a8a8; } -.ansi48-116 { background: #54a8a8; } -.inv48-116 { color: #54a8a8; } -.ansi38-117 { color: #54a8d2; } -.inv38-117 { background: #54a8d2; } -.ansi48-117 { background: #54a8d2; } -.inv48-117 { color: #54a8d2; } -.ansi38-148 { color: #7ea800; } -.inv38-148 { background: #7ea800; } -.ansi48-148 { background: #7ea800; } -.inv48-148 { color: #7ea800; } -.ansi38-149 { color: #7ea82a; } -.inv38-149 { background: #7ea82a; } -.ansi48-149 { background: #7ea82a; } -.inv48-149 { color: #7ea82a; } -.ansi38-150 { color: #7ea854; } -.inv38-150 { background: #7ea854; } -.ansi48-150 { background: #7ea854; } -.inv48-150 { color: #7ea854; } -.ansi38-151 { color: #7ea87e; } -.inv38-151 { background: #7ea87e; } -.ansi48-151 { background: #7ea87e; } -.inv48-151 { color: #7ea87e; } -.ansi38-152 { color: #7ea8a8; } -.inv38-152 { background: #7ea8a8; } -.ansi48-152 { background: #7ea8a8; } -.inv48-152 { color: #7ea8a8; } -.ansi38-153 { color: #7ea8d2; } -.inv38-153 { background: #7ea8d2; } -.ansi48-153 { background: #7ea8d2; } -.inv48-153 { color: #7ea8d2; } -.ansi38-184 { color: #a8a800; } -.inv38-184 { background: #a8a800; } -.ansi48-184 { background: #a8a800; } -.inv48-184 { color: #a8a800; } -.ansi38-185 { color: #a8a82a; } -.inv38-185 { background: #a8a82a; } -.ansi48-185 { background: #a8a82a; } -.inv48-185 { color: #a8a82a; } -.ansi38-186 { color: #a8a854; } -.inv38-186 { background: #a8a854; } -.ansi48-186 { background: #a8a854; } -.inv48-186 { color: #a8a854; } -.ansi38-187 { color: #a8a87e; } -.inv38-187 { background: #a8a87e; } -.ansi48-187 { background: #a8a87e; } -.inv48-187 { color: #a8a87e; } -.ansi38-188 { color: #a8a8a8; } -.inv38-188 { background: #a8a8a8; } -.ansi48-188 { background: #a8a8a8; } -.inv48-188 { color: #a8a8a8; } -.ansi38-189 { color: #a8a8d2; } -.inv38-189 { background: #a8a8d2; } -.ansi48-189 { background: #a8a8d2; } -.inv48-189 { color: #a8a8d2; } -.ansi38-220 { color: #d2a800; } -.inv38-220 { background: #d2a800; } -.ansi48-220 { background: #d2a800; } -.inv48-220 { color: #d2a800; } -.ansi38-221 { color: #d2a82a; } -.inv38-221 { background: #d2a82a; } -.ansi48-221 { background: #d2a82a; } -.inv48-221 { color: #d2a82a; } -.ansi38-222 { color: #d2a854; } -.inv38-222 { background: #d2a854; } -.ansi48-222 { background: #d2a854; } -.inv48-222 { color: #d2a854; } -.ansi38-223 { color: #d2a87e; } -.inv38-223 { background: #d2a87e; } -.ansi48-223 { background: #d2a87e; } -.inv48-223 { color: #d2a87e; } -.ansi38-224 { color: #d2a8a8; } -.inv38-224 { background: #d2a8a8; } -.ansi48-224 { background: #d2a8a8; } -.inv48-224 { color: #d2a8a8; } -.ansi38-225 { color: #d2a8d2; } -.inv38-225 { background: #d2a8d2; } -.ansi48-225 { background: #d2a8d2; } -.inv48-225 { color: #d2a8d2; } -.ansi38-46 { color: #00d200; } -.inv38-46 { background: #00d200; } -.ansi48-46 { background: #00d200; } -.inv48-46 { color: #00d200; } -.ansi38-47 { color: #00d22a; } -.inv38-47 { background: #00d22a; } -.ansi48-47 { background: #00d22a; } -.inv48-47 { color: #00d22a; } -.ansi38-48 { color: #00d254; } -.inv38-48 { background: #00d254; } -.ansi48-48 { background: #00d254; } -.inv48-48 { color: #00d254; } -.ansi38-49 { color: #00d27e; } -.inv38-49 { background: #00d27e; } -.ansi48-49 { background: #00d27e; } -.inv48-49 { color: #00d27e; } -.ansi38-50 { color: #00d2a8; } -.inv38-50 { background: #00d2a8; } -.ansi48-50 { background: #00d2a8; } -.inv48-50 { color: #00d2a8; } -.ansi38-51 { color: #00d2d2; } -.inv38-51 { background: #00d2d2; } -.ansi48-51 { background: #00d2d2; } -.inv48-51 { color: #00d2d2; } -.ansi38-82 { color: #2ad200; } -.inv38-82 { background: #2ad200; } -.ansi48-82 { background: #2ad200; } -.inv48-82 { color: #2ad200; } -.ansi38-83 { color: #2ad22a; } -.inv38-83 { background: #2ad22a; } -.ansi48-83 { background: #2ad22a; } -.inv48-83 { color: #2ad22a; } -.ansi38-84 { color: #2ad254; } -.inv38-84 { background: #2ad254; } -.ansi48-84 { background: #2ad254; } -.inv48-84 { color: #2ad254; } -.ansi38-85 { color: #2ad27e; } -.inv38-85 { background: #2ad27e; } -.ansi48-85 { background: #2ad27e; } -.inv48-85 { color: #2ad27e; } -.ansi38-86 { color: #2ad2a8; } -.inv38-86 { background: #2ad2a8; } -.ansi48-86 { background: #2ad2a8; } -.inv48-86 { color: #2ad2a8; } -.ansi38-87 { color: #2ad2d2; } -.inv38-87 { background: #2ad2d2; } -.ansi48-87 { background: #2ad2d2; } -.inv48-87 { color: #2ad2d2; } -.ansi38-118 { color: #54d200; } -.inv38-118 { background: #54d200; } -.ansi48-118 { background: #54d200; } -.inv48-118 { color: #54d200; } -.ansi38-119 { color: #54d22a; } -.inv38-119 { background: #54d22a; } -.ansi48-119 { background: #54d22a; } -.inv48-119 { color: #54d22a; } -.ansi38-120 { color: #54d254; } -.inv38-120 { background: #54d254; } -.ansi48-120 { background: #54d254; } -.inv48-120 { color: #54d254; } -.ansi38-121 { color: #54d27e; } -.inv38-121 { background: #54d27e; } -.ansi48-121 { background: #54d27e; } -.inv48-121 { color: #54d27e; } -.ansi38-122 { color: #54d2a8; } -.inv38-122 { background: #54d2a8; } -.ansi48-122 { background: #54d2a8; } -.inv48-122 { color: #54d2a8; } -.ansi38-123 { color: #54d2d2; } -.inv38-123 { background: #54d2d2; } -.ansi48-123 { background: #54d2d2; } -.inv48-123 { color: #54d2d2; } -.ansi38-154 { color: #7ed200; } -.inv38-154 { background: #7ed200; } -.ansi48-154 { background: #7ed200; } -.inv48-154 { color: #7ed200; } -.ansi38-155 { color: #7ed22a; } -.inv38-155 { background: #7ed22a; } -.ansi48-155 { background: #7ed22a; } -.inv48-155 { color: #7ed22a; } -.ansi38-156 { color: #7ed254; } -.inv38-156 { background: #7ed254; } -.ansi48-156 { background: #7ed254; } -.inv48-156 { color: #7ed254; } -.ansi38-157 { color: #7ed27e; } -.inv38-157 { background: #7ed27e; } -.ansi48-157 { background: #7ed27e; } -.inv48-157 { color: #7ed27e; } -.ansi38-158 { color: #7ed2a8; } -.inv38-158 { background: #7ed2a8; } -.ansi48-158 { background: #7ed2a8; } -.inv48-158 { color: #7ed2a8; } -.ansi38-159 { color: #7ed2d2; } -.inv38-159 { background: #7ed2d2; } -.ansi48-159 { background: #7ed2d2; } -.inv48-159 { color: #7ed2d2; } -.ansi38-190 { color: #a8d200; } -.inv38-190 { background: #a8d200; } -.ansi48-190 { background: #a8d200; } -.inv48-190 { color: #a8d200; } -.ansi38-191 { color: #a8d22a; } -.inv38-191 { background: #a8d22a; } -.ansi48-191 { background: #a8d22a; } -.inv48-191 { color: #a8d22a; } -.ansi38-192 { color: #a8d254; } -.inv38-192 { background: #a8d254; } -.ansi48-192 { background: #a8d254; } -.inv48-192 { color: #a8d254; } -.ansi38-193 { color: #a8d27e; } -.inv38-193 { background: #a8d27e; } -.ansi48-193 { background: #a8d27e; } -.inv48-193 { color: #a8d27e; } -.ansi38-194 { color: #a8d2a8; } -.inv38-194 { background: #a8d2a8; } -.ansi48-194 { background: #a8d2a8; } -.inv48-194 { color: #a8d2a8; } -.ansi38-195 { color: #a8d2d2; } -.inv38-195 { background: #a8d2d2; } -.ansi48-195 { background: #a8d2d2; } -.inv48-195 { color: #a8d2d2; } -.ansi38-226 { color: #d2d200; } -.inv38-226 { background: #d2d200; } -.ansi48-226 { background: #d2d200; } -.inv48-226 { color: #d2d200; } -.ansi38-227 { color: #d2d22a; } -.inv38-227 { background: #d2d22a; } -.ansi48-227 { background: #d2d22a; } -.inv48-227 { color: #d2d22a; } -.ansi38-228 { color: #d2d254; } -.inv38-228 { background: #d2d254; } -.ansi48-228 { background: #d2d254; } -.inv48-228 { color: #d2d254; } -.ansi38-229 { color: #d2d27e; } -.inv38-229 { background: #d2d27e; } -.ansi48-229 { background: #d2d27e; } -.inv48-229 { color: #d2d27e; } -.ansi38-230 { color: #d2d2a8; } -.inv38-230 { background: #d2d2a8; } -.ansi48-230 { background: #d2d2a8; } -.inv48-230 { color: #d2d2a8; } -.ansi38-231 { color: #d2d2d2; } -.inv38-231 { background: #d2d2d2; } -.ansi48-231 { background: #d2d2d2; } -.inv48-231 { color: #d2d2d2; } +.ansi38-17 { color: #00005f; } +.inv38-17 { background: #00005f; } +.ansi48-17 { background: #00005f; } +.inv48-17 { color: #00005f; } +.ansi38-18 { color: #000087; } +.inv38-18 { background: #000087; } +.ansi48-18 { background: #000087; } +.inv48-18 { color: #000087; } +.ansi38-19 { color: #0000af; } +.inv38-19 { background: #0000af; } +.ansi48-19 { background: #0000af; } +.inv48-19 { color: #0000af; } +.ansi38-20 { color: #0000d7; } +.inv38-20 { background: #0000d7; } +.ansi48-20 { background: #0000d7; } +.inv48-20 { color: #0000d7; } +.ansi38-21 { color: #0000ff; } +.inv38-21 { background: #0000ff; } +.ansi48-21 { background: #0000ff; } +.inv48-21 { color: #0000ff; } +.ansi38-52 { color: #5f0000; } +.inv38-52 { background: #5f0000; } +.ansi48-52 { background: #5f0000; } +.inv48-52 { color: #5f0000; } +.ansi38-53 { color: #5f005f; } +.inv38-53 { background: #5f005f; } +.ansi48-53 { background: #5f005f; } +.inv48-53 { color: #5f005f; } +.ansi38-54 { color: #5f0087; } +.inv38-54 { background: #5f0087; } +.ansi48-54 { background: #5f0087; } +.inv48-54 { color: #5f0087; } +.ansi38-55 { color: #5f00af; } +.inv38-55 { background: #5f00af; } +.ansi48-55 { background: #5f00af; } +.inv48-55 { color: #5f00af; } +.ansi38-56 { color: #5f00d7; } +.inv38-56 { background: #5f00d7; } +.ansi48-56 { background: #5f00d7; } +.inv48-56 { color: #5f00d7; } +.ansi38-57 { color: #5f00ff; } +.inv38-57 { background: #5f00ff; } +.ansi48-57 { background: #5f00ff; } +.inv48-57 { color: #5f00ff; } +.ansi38-88 { color: #870000; } +.inv38-88 { background: #870000; } +.ansi48-88 { background: #870000; } +.inv48-88 { color: #870000; } +.ansi38-89 { color: #87005f; } +.inv38-89 { background: #87005f; } +.ansi48-89 { background: #87005f; } +.inv48-89 { color: #87005f; } +.ansi38-90 { color: #870087; } +.inv38-90 { background: #870087; } +.ansi48-90 { background: #870087; } +.inv48-90 { color: #870087; } +.ansi38-91 { color: #8700af; } +.inv38-91 { background: #8700af; } +.ansi48-91 { background: #8700af; } +.inv48-91 { color: #8700af; } +.ansi38-92 { color: #8700d7; } +.inv38-92 { background: #8700d7; } +.ansi48-92 { background: #8700d7; } +.inv48-92 { color: #8700d7; } +.ansi38-93 { color: #8700ff; } +.inv38-93 { background: #8700ff; } +.ansi48-93 { background: #8700ff; } +.inv48-93 { color: #8700ff; } +.ansi38-124 { color: #af0000; } +.inv38-124 { background: #af0000; } +.ansi48-124 { background: #af0000; } +.inv48-124 { color: #af0000; } +.ansi38-125 { color: #af005f; } +.inv38-125 { background: #af005f; } +.ansi48-125 { background: #af005f; } +.inv48-125 { color: #af005f; } +.ansi38-126 { color: #af0087; } +.inv38-126 { background: #af0087; } +.ansi48-126 { background: #af0087; } +.inv48-126 { color: #af0087; } +.ansi38-127 { color: #af00af; } +.inv38-127 { background: #af00af; } +.ansi48-127 { background: #af00af; } +.inv48-127 { color: #af00af; } +.ansi38-128 { color: #af00d7; } +.inv38-128 { background: #af00d7; } +.ansi48-128 { background: #af00d7; } +.inv48-128 { color: #af00d7; } +.ansi38-129 { color: #af00ff; } +.inv38-129 { background: #af00ff; } +.ansi48-129 { background: #af00ff; } +.inv48-129 { color: #af00ff; } +.ansi38-160 { color: #d70000; } +.inv38-160 { background: #d70000; } +.ansi48-160 { background: #d70000; } +.inv48-160 { color: #d70000; } +.ansi38-161 { color: #d7005f; } +.inv38-161 { background: #d7005f; } +.ansi48-161 { background: #d7005f; } +.inv48-161 { color: #d7005f; } +.ansi38-162 { color: #d70087; } +.inv38-162 { background: #d70087; } +.ansi48-162 { background: #d70087; } +.inv48-162 { color: #d70087; } +.ansi38-163 { color: #d700af; } +.inv38-163 { background: #d700af; } +.ansi48-163 { background: #d700af; } +.inv48-163 { color: #d700af; } +.ansi38-164 { color: #d700d7; } +.inv38-164 { background: #d700d7; } +.ansi48-164 { background: #d700d7; } +.inv48-164 { color: #d700d7; } +.ansi38-165 { color: #d700ff; } +.inv38-165 { background: #d700ff; } +.ansi48-165 { background: #d700ff; } +.inv48-165 { color: #d700ff; } +.ansi38-196 { color: #ff0000; } +.inv38-196 { background: #ff0000; } +.ansi48-196 { background: #ff0000; } +.inv48-196 { color: #ff0000; } +.ansi38-197 { color: #ff005f; } +.inv38-197 { background: #ff005f; } +.ansi48-197 { background: #ff005f; } +.inv48-197 { color: #ff005f; } +.ansi38-198 { color: #ff0087; } +.inv38-198 { background: #ff0087; } +.ansi48-198 { background: #ff0087; } +.inv48-198 { color: #ff0087; } +.ansi38-199 { color: #ff00af; } +.inv38-199 { background: #ff00af; } +.ansi48-199 { background: #ff00af; } +.inv48-199 { color: #ff00af; } +.ansi38-200 { color: #ff00d7; } +.inv38-200 { background: #ff00d7; } +.ansi48-200 { background: #ff00d7; } +.inv48-200 { color: #ff00d7; } +.ansi38-201 { color: #ff00ff; } +.inv38-201 { background: #ff00ff; } +.ansi48-201 { background: #ff00ff; } +.inv48-201 { color: #ff00ff; } +.ansi38-22 { color: #005f00; } +.inv38-22 { background: #005f00; } +.ansi48-22 { background: #005f00; } +.inv48-22 { color: #005f00; } +.ansi38-23 { color: #005f5f; } +.inv38-23 { background: #005f5f; } +.ansi48-23 { background: #005f5f; } +.inv48-23 { color: #005f5f; } +.ansi38-24 { color: #005f87; } +.inv38-24 { background: #005f87; } +.ansi48-24 { background: #005f87; } +.inv48-24 { color: #005f87; } +.ansi38-25 { color: #005faf; } +.inv38-25 { background: #005faf; } +.ansi48-25 { background: #005faf; } +.inv48-25 { color: #005faf; } +.ansi38-26 { color: #005fd7; } +.inv38-26 { background: #005fd7; } +.ansi48-26 { background: #005fd7; } +.inv48-26 { color: #005fd7; } +.ansi38-27 { color: #005fff; } +.inv38-27 { background: #005fff; } +.ansi48-27 { background: #005fff; } +.inv48-27 { color: #005fff; } +.ansi38-58 { color: #5f5f00; } +.inv38-58 { background: #5f5f00; } +.ansi48-58 { background: #5f5f00; } +.inv48-58 { color: #5f5f00; } +.ansi38-59 { color: #5f5f5f; } +.inv38-59 { background: #5f5f5f; } +.ansi48-59 { background: #5f5f5f; } +.inv48-59 { color: #5f5f5f; } +.ansi38-60 { color: #5f5f87; } +.inv38-60 { background: #5f5f87; } +.ansi48-60 { background: #5f5f87; } +.inv48-60 { color: #5f5f87; } +.ansi38-61 { color: #5f5faf; } +.inv38-61 { background: #5f5faf; } +.ansi48-61 { background: #5f5faf; } +.inv48-61 { color: #5f5faf; } +.ansi38-62 { color: #5f5fd7; } +.inv38-62 { background: #5f5fd7; } +.ansi48-62 { background: #5f5fd7; } +.inv48-62 { color: #5f5fd7; } +.ansi38-63 { color: #5f5fff; } +.inv38-63 { background: #5f5fff; } +.ansi48-63 { background: #5f5fff; } +.inv48-63 { color: #5f5fff; } +.ansi38-94 { color: #875f00; } +.inv38-94 { background: #875f00; } +.ansi48-94 { background: #875f00; } +.inv48-94 { color: #875f00; } +.ansi38-95 { color: #875f5f; } +.inv38-95 { background: #875f5f; } +.ansi48-95 { background: #875f5f; } +.inv48-95 { color: #875f5f; } +.ansi38-96 { color: #875f87; } +.inv38-96 { background: #875f87; } +.ansi48-96 { background: #875f87; } +.inv48-96 { color: #875f87; } +.ansi38-97 { color: #875faf; } +.inv38-97 { background: #875faf; } +.ansi48-97 { background: #875faf; } +.inv48-97 { color: #875faf; } +.ansi38-98 { color: #875fd7; } +.inv38-98 { background: #875fd7; } +.ansi48-98 { background: #875fd7; } +.inv48-98 { color: #875fd7; } +.ansi38-99 { color: #875fff; } +.inv38-99 { background: #875fff; } +.ansi48-99 { background: #875fff; } +.inv48-99 { color: #875fff; } +.ansi38-130 { color: #af5f00; } +.inv38-130 { background: #af5f00; } +.ansi48-130 { background: #af5f00; } +.inv48-130 { color: #af5f00; } +.ansi38-131 { color: #af5f5f; } +.inv38-131 { background: #af5f5f; } +.ansi48-131 { background: #af5f5f; } +.inv48-131 { color: #af5f5f; } +.ansi38-132 { color: #af5f87; } +.inv38-132 { background: #af5f87; } +.ansi48-132 { background: #af5f87; } +.inv48-132 { color: #af5f87; } +.ansi38-133 { color: #af5faf; } +.inv38-133 { background: #af5faf; } +.ansi48-133 { background: #af5faf; } +.inv48-133 { color: #af5faf; } +.ansi38-134 { color: #af5fd7; } +.inv38-134 { background: #af5fd7; } +.ansi48-134 { background: #af5fd7; } +.inv48-134 { color: #af5fd7; } +.ansi38-135 { color: #af5fff; } +.inv38-135 { background: #af5fff; } +.ansi48-135 { background: #af5fff; } +.inv48-135 { color: #af5fff; } +.ansi38-166 { color: #d75f00; } +.inv38-166 { background: #d75f00; } +.ansi48-166 { background: #d75f00; } +.inv48-166 { color: #d75f00; } +.ansi38-167 { color: #d75f5f; } +.inv38-167 { background: #d75f5f; } +.ansi48-167 { background: #d75f5f; } +.inv48-167 { color: #d75f5f; } +.ansi38-168 { color: #d75f87; } +.inv38-168 { background: #d75f87; } +.ansi48-168 { background: #d75f87; } +.inv48-168 { color: #d75f87; } +.ansi38-169 { color: #d75faf; } +.inv38-169 { background: #d75faf; } +.ansi48-169 { background: #d75faf; } +.inv48-169 { color: #d75faf; } +.ansi38-170 { color: #d75fd7; } +.inv38-170 { background: #d75fd7; } +.ansi48-170 { background: #d75fd7; } +.inv48-170 { color: #d75fd7; } +.ansi38-171 { color: #d75fff; } +.inv38-171 { background: #d75fff; } +.ansi48-171 { background: #d75fff; } +.inv48-171 { color: #d75fff; } +.ansi38-202 { color: #ff5f00; } +.inv38-202 { background: #ff5f00; } +.ansi48-202 { background: #ff5f00; } +.inv48-202 { color: #ff5f00; } +.ansi38-203 { color: #ff5f5f; } +.inv38-203 { background: #ff5f5f; } +.ansi48-203 { background: #ff5f5f; } +.inv48-203 { color: #ff5f5f; } +.ansi38-204 { color: #ff5f87; } +.inv38-204 { background: #ff5f87; } +.ansi48-204 { background: #ff5f87; } +.inv48-204 { color: #ff5f87; } +.ansi38-205 { color: #ff5faf; } +.inv38-205 { background: #ff5faf; } +.ansi48-205 { background: #ff5faf; } +.inv48-205 { color: #ff5faf; } +.ansi38-206 { color: #ff5fd7; } +.inv38-206 { background: #ff5fd7; } +.ansi48-206 { background: #ff5fd7; } +.inv48-206 { color: #ff5fd7; } +.ansi38-207 { color: #ff5fff; } +.inv38-207 { background: #ff5fff; } +.ansi48-207 { background: #ff5fff; } +.inv48-207 { color: #ff5fff; } +.ansi38-28 { color: #008700; } +.inv38-28 { background: #008700; } +.ansi48-28 { background: #008700; } +.inv48-28 { color: #008700; } +.ansi38-29 { color: #00875f; } +.inv38-29 { background: #00875f; } +.ansi48-29 { background: #00875f; } +.inv48-29 { color: #00875f; } +.ansi38-30 { color: #008787; } +.inv38-30 { background: #008787; } +.ansi48-30 { background: #008787; } +.inv48-30 { color: #008787; } +.ansi38-31 { color: #0087af; } +.inv38-31 { background: #0087af; } +.ansi48-31 { background: #0087af; } +.inv48-31 { color: #0087af; } +.ansi38-32 { color: #0087d7; } +.inv38-32 { background: #0087d7; } +.ansi48-32 { background: #0087d7; } +.inv48-32 { color: #0087d7; } +.ansi38-33 { color: #0087ff; } +.inv38-33 { background: #0087ff; } +.ansi48-33 { background: #0087ff; } +.inv48-33 { color: #0087ff; } +.ansi38-64 { color: #5f8700; } +.inv38-64 { background: #5f8700; } +.ansi48-64 { background: #5f8700; } +.inv48-64 { color: #5f8700; } +.ansi38-65 { color: #5f875f; } +.inv38-65 { background: #5f875f; } +.ansi48-65 { background: #5f875f; } +.inv48-65 { color: #5f875f; } +.ansi38-66 { color: #5f8787; } +.inv38-66 { background: #5f8787; } +.ansi48-66 { background: #5f8787; } +.inv48-66 { color: #5f8787; } +.ansi38-67 { color: #5f87af; } +.inv38-67 { background: #5f87af; } +.ansi48-67 { background: #5f87af; } +.inv48-67 { color: #5f87af; } +.ansi38-68 { color: #5f87d7; } +.inv38-68 { background: #5f87d7; } +.ansi48-68 { background: #5f87d7; } +.inv48-68 { color: #5f87d7; } +.ansi38-69 { color: #5f87ff; } +.inv38-69 { background: #5f87ff; } +.ansi48-69 { background: #5f87ff; } +.inv48-69 { color: #5f87ff; } +.ansi38-100 { color: #878700; } +.inv38-100 { background: #878700; } +.ansi48-100 { background: #878700; } +.inv48-100 { color: #878700; } +.ansi38-101 { color: #87875f; } +.inv38-101 { background: #87875f; } +.ansi48-101 { background: #87875f; } +.inv48-101 { color: #87875f; } +.ansi38-102 { color: #878787; } +.inv38-102 { background: #878787; } +.ansi48-102 { background: #878787; } +.inv48-102 { color: #878787; } +.ansi38-103 { color: #8787af; } +.inv38-103 { background: #8787af; } +.ansi48-103 { background: #8787af; } +.inv48-103 { color: #8787af; } +.ansi38-104 { color: #8787d7; } +.inv38-104 { background: #8787d7; } +.ansi48-104 { background: #8787d7; } +.inv48-104 { color: #8787d7; } +.ansi38-105 { color: #8787ff; } +.inv38-105 { background: #8787ff; } +.ansi48-105 { background: #8787ff; } +.inv48-105 { color: #8787ff; } +.ansi38-136 { color: #af8700; } +.inv38-136 { background: #af8700; } +.ansi48-136 { background: #af8700; } +.inv48-136 { color: #af8700; } +.ansi38-137 { color: #af875f; } +.inv38-137 { background: #af875f; } +.ansi48-137 { background: #af875f; } +.inv48-137 { color: #af875f; } +.ansi38-138 { color: #af8787; } +.inv38-138 { background: #af8787; } +.ansi48-138 { background: #af8787; } +.inv48-138 { color: #af8787; } +.ansi38-139 { color: #af87af; } +.inv38-139 { background: #af87af; } +.ansi48-139 { background: #af87af; } +.inv48-139 { color: #af87af; } +.ansi38-140 { color: #af87d7; } +.inv38-140 { background: #af87d7; } +.ansi48-140 { background: #af87d7; } +.inv48-140 { color: #af87d7; } +.ansi38-141 { color: #af87ff; } +.inv38-141 { background: #af87ff; } +.ansi48-141 { background: #af87ff; } +.inv48-141 { color: #af87ff; } +.ansi38-172 { color: #d78700; } +.inv38-172 { background: #d78700; } +.ansi48-172 { background: #d78700; } +.inv48-172 { color: #d78700; } +.ansi38-173 { color: #d7875f; } +.inv38-173 { background: #d7875f; } +.ansi48-173 { background: #d7875f; } +.inv48-173 { color: #d7875f; } +.ansi38-174 { color: #d78787; } +.inv38-174 { background: #d78787; } +.ansi48-174 { background: #d78787; } +.inv48-174 { color: #d78787; } +.ansi38-175 { color: #d787af; } +.inv38-175 { background: #d787af; } +.ansi48-175 { background: #d787af; } +.inv48-175 { color: #d787af; } +.ansi38-176 { color: #d787d7; } +.inv38-176 { background: #d787d7; } +.ansi48-176 { background: #d787d7; } +.inv48-176 { color: #d787d7; } +.ansi38-177 { color: #d787ff; } +.inv38-177 { background: #d787ff; } +.ansi48-177 { background: #d787ff; } +.inv48-177 { color: #d787ff; } +.ansi38-208 { color: #ff8700; } +.inv38-208 { background: #ff8700; } +.ansi48-208 { background: #ff8700; } +.inv48-208 { color: #ff8700; } +.ansi38-209 { color: #ff875f; } +.inv38-209 { background: #ff875f; } +.ansi48-209 { background: #ff875f; } +.inv48-209 { color: #ff875f; } +.ansi38-210 { color: #ff8787; } +.inv38-210 { background: #ff8787; } +.ansi48-210 { background: #ff8787; } +.inv48-210 { color: #ff8787; } +.ansi38-211 { color: #ff87af; } +.inv38-211 { background: #ff87af; } +.ansi48-211 { background: #ff87af; } +.inv48-211 { color: #ff87af; } +.ansi38-212 { color: #ff87d7; } +.inv38-212 { background: #ff87d7; } +.ansi48-212 { background: #ff87d7; } +.inv48-212 { color: #ff87d7; } +.ansi38-213 { color: #ff87ff; } +.inv38-213 { background: #ff87ff; } +.ansi48-213 { background: #ff87ff; } +.inv48-213 { color: #ff87ff; } +.ansi38-34 { color: #00af00; } +.inv38-34 { background: #00af00; } +.ansi48-34 { background: #00af00; } +.inv48-34 { color: #00af00; } +.ansi38-35 { color: #00af5f; } +.inv38-35 { background: #00af5f; } +.ansi48-35 { background: #00af5f; } +.inv48-35 { color: #00af5f; } +.ansi38-36 { color: #00af87; } +.inv38-36 { background: #00af87; } +.ansi48-36 { background: #00af87; } +.inv48-36 { color: #00af87; } +.ansi38-37 { color: #00afaf; } +.inv38-37 { background: #00afaf; } +.ansi48-37 { background: #00afaf; } +.inv48-37 { color: #00afaf; } +.ansi38-38 { color: #00afd7; } +.inv38-38 { background: #00afd7; } +.ansi48-38 { background: #00afd7; } +.inv48-38 { color: #00afd7; } +.ansi38-39 { color: #00afff; } +.inv38-39 { background: #00afff; } +.ansi48-39 { background: #00afff; } +.inv48-39 { color: #00afff; } +.ansi38-70 { color: #5faf00; } +.inv38-70 { background: #5faf00; } +.ansi48-70 { background: #5faf00; } +.inv48-70 { color: #5faf00; } +.ansi38-71 { color: #5faf5f; } +.inv38-71 { background: #5faf5f; } +.ansi48-71 { background: #5faf5f; } +.inv48-71 { color: #5faf5f; } +.ansi38-72 { color: #5faf87; } +.inv38-72 { background: #5faf87; } +.ansi48-72 { background: #5faf87; } +.inv48-72 { color: #5faf87; } +.ansi38-73 { color: #5fafaf; } +.inv38-73 { background: #5fafaf; } +.ansi48-73 { background: #5fafaf; } +.inv48-73 { color: #5fafaf; } +.ansi38-74 { color: #5fafd7; } +.inv38-74 { background: #5fafd7; } +.ansi48-74 { background: #5fafd7; } +.inv48-74 { color: #5fafd7; } +.ansi38-75 { color: #5fafff; } +.inv38-75 { background: #5fafff; } +.ansi48-75 { background: #5fafff; } +.inv48-75 { color: #5fafff; } +.ansi38-106 { color: #87af00; } +.inv38-106 { background: #87af00; } +.ansi48-106 { background: #87af00; } +.inv48-106 { color: #87af00; } +.ansi38-107 { color: #87af5f; } +.inv38-107 { background: #87af5f; } +.ansi48-107 { background: #87af5f; } +.inv48-107 { color: #87af5f; } +.ansi38-108 { color: #87af87; } +.inv38-108 { background: #87af87; } +.ansi48-108 { background: #87af87; } +.inv48-108 { color: #87af87; } +.ansi38-109 { color: #87afaf; } +.inv38-109 { background: #87afaf; } +.ansi48-109 { background: #87afaf; } +.inv48-109 { color: #87afaf; } +.ansi38-110 { color: #87afd7; } +.inv38-110 { background: #87afd7; } +.ansi48-110 { background: #87afd7; } +.inv48-110 { color: #87afd7; } +.ansi38-111 { color: #87afff; } +.inv38-111 { background: #87afff; } +.ansi48-111 { background: #87afff; } +.inv48-111 { color: #87afff; } +.ansi38-142 { color: #afaf00; } +.inv38-142 { background: #afaf00; } +.ansi48-142 { background: #afaf00; } +.inv48-142 { color: #afaf00; } +.ansi38-143 { color: #afaf5f; } +.inv38-143 { background: #afaf5f; } +.ansi48-143 { background: #afaf5f; } +.inv48-143 { color: #afaf5f; } +.ansi38-144 { color: #afaf87; } +.inv38-144 { background: #afaf87; } +.ansi48-144 { background: #afaf87; } +.inv48-144 { color: #afaf87; } +.ansi38-145 { color: #afafaf; } +.inv38-145 { background: #afafaf; } +.ansi48-145 { background: #afafaf; } +.inv48-145 { color: #afafaf; } +.ansi38-146 { color: #afafd7; } +.inv38-146 { background: #afafd7; } +.ansi48-146 { background: #afafd7; } +.inv48-146 { color: #afafd7; } +.ansi38-147 { color: #afafff; } +.inv38-147 { background: #afafff; } +.ansi48-147 { background: #afafff; } +.inv48-147 { color: #afafff; } +.ansi38-178 { color: #d7af00; } +.inv38-178 { background: #d7af00; } +.ansi48-178 { background: #d7af00; } +.inv48-178 { color: #d7af00; } +.ansi38-179 { color: #d7af5f; } +.inv38-179 { background: #d7af5f; } +.ansi48-179 { background: #d7af5f; } +.inv48-179 { color: #d7af5f; } +.ansi38-180 { color: #d7af87; } +.inv38-180 { background: #d7af87; } +.ansi48-180 { background: #d7af87; } +.inv48-180 { color: #d7af87; } +.ansi38-181 { color: #d7afaf; } +.inv38-181 { background: #d7afaf; } +.ansi48-181 { background: #d7afaf; } +.inv48-181 { color: #d7afaf; } +.ansi38-182 { color: #d7afd7; } +.inv38-182 { background: #d7afd7; } +.ansi48-182 { background: #d7afd7; } +.inv48-182 { color: #d7afd7; } +.ansi38-183 { color: #d7afff; } +.inv38-183 { background: #d7afff; } +.ansi48-183 { background: #d7afff; } +.inv48-183 { color: #d7afff; } +.ansi38-214 { color: #ffaf00; } +.inv38-214 { background: #ffaf00; } +.ansi48-214 { background: #ffaf00; } +.inv48-214 { color: #ffaf00; } +.ansi38-215 { color: #ffaf5f; } +.inv38-215 { background: #ffaf5f; } +.ansi48-215 { background: #ffaf5f; } +.inv48-215 { color: #ffaf5f; } +.ansi38-216 { color: #ffaf87; } +.inv38-216 { background: #ffaf87; } +.ansi48-216 { background: #ffaf87; } +.inv48-216 { color: #ffaf87; } +.ansi38-217 { color: #ffafaf; } +.inv38-217 { background: #ffafaf; } +.ansi48-217 { background: #ffafaf; } +.inv48-217 { color: #ffafaf; } +.ansi38-218 { color: #ffafd7; } +.inv38-218 { background: #ffafd7; } +.ansi48-218 { background: #ffafd7; } +.inv48-218 { color: #ffafd7; } +.ansi38-219 { color: #ffafff; } +.inv38-219 { background: #ffafff; } +.ansi48-219 { background: #ffafff; } +.inv48-219 { color: #ffafff; } +.ansi38-40 { color: #00d700; } +.inv38-40 { background: #00d700; } +.ansi48-40 { background: #00d700; } +.inv48-40 { color: #00d700; } +.ansi38-41 { color: #00d75f; } +.inv38-41 { background: #00d75f; } +.ansi48-41 { background: #00d75f; } +.inv48-41 { color: #00d75f; } +.ansi38-42 { color: #00d787; } +.inv38-42 { background: #00d787; } +.ansi48-42 { background: #00d787; } +.inv48-42 { color: #00d787; } +.ansi38-43 { color: #00d7af; } +.inv38-43 { background: #00d7af; } +.ansi48-43 { background: #00d7af; } +.inv48-43 { color: #00d7af; } +.ansi38-44 { color: #00d7d7; } +.inv38-44 { background: #00d7d7; } +.ansi48-44 { background: #00d7d7; } +.inv48-44 { color: #00d7d7; } +.ansi38-45 { color: #00d7ff; } +.inv38-45 { background: #00d7ff; } +.ansi48-45 { background: #00d7ff; } +.inv48-45 { color: #00d7ff; } +.ansi38-76 { color: #5fd700; } +.inv38-76 { background: #5fd700; } +.ansi48-76 { background: #5fd700; } +.inv48-76 { color: #5fd700; } +.ansi38-77 { color: #5fd75f; } +.inv38-77 { background: #5fd75f; } +.ansi48-77 { background: #5fd75f; } +.inv48-77 { color: #5fd75f; } +.ansi38-78 { color: #5fd787; } +.inv38-78 { background: #5fd787; } +.ansi48-78 { background: #5fd787; } +.inv48-78 { color: #5fd787; } +.ansi38-79 { color: #5fd7af; } +.inv38-79 { background: #5fd7af; } +.ansi48-79 { background: #5fd7af; } +.inv48-79 { color: #5fd7af; } +.ansi38-80 { color: #5fd7d7; } +.inv38-80 { background: #5fd7d7; } +.ansi48-80 { background: #5fd7d7; } +.inv48-80 { color: #5fd7d7; } +.ansi38-81 { color: #5fd7ff; } +.inv38-81 { background: #5fd7ff; } +.ansi48-81 { background: #5fd7ff; } +.inv48-81 { color: #5fd7ff; } +.ansi38-112 { color: #87d700; } +.inv38-112 { background: #87d700; } +.ansi48-112 { background: #87d700; } +.inv48-112 { color: #87d700; } +.ansi38-113 { color: #87d75f; } +.inv38-113 { background: #87d75f; } +.ansi48-113 { background: #87d75f; } +.inv48-113 { color: #87d75f; } +.ansi38-114 { color: #87d787; } +.inv38-114 { background: #87d787; } +.ansi48-114 { background: #87d787; } +.inv48-114 { color: #87d787; } +.ansi38-115 { color: #87d7af; } +.inv38-115 { background: #87d7af; } +.ansi48-115 { background: #87d7af; } +.inv48-115 { color: #87d7af; } +.ansi38-116 { color: #87d7d7; } +.inv38-116 { background: #87d7d7; } +.ansi48-116 { background: #87d7d7; } +.inv48-116 { color: #87d7d7; } +.ansi38-117 { color: #87d7ff; } +.inv38-117 { background: #87d7ff; } +.ansi48-117 { background: #87d7ff; } +.inv48-117 { color: #87d7ff; } +.ansi38-148 { color: #afd700; } +.inv38-148 { background: #afd700; } +.ansi48-148 { background: #afd700; } +.inv48-148 { color: #afd700; } +.ansi38-149 { color: #afd75f; } +.inv38-149 { background: #afd75f; } +.ansi48-149 { background: #afd75f; } +.inv48-149 { color: #afd75f; } +.ansi38-150 { color: #afd787; } +.inv38-150 { background: #afd787; } +.ansi48-150 { background: #afd787; } +.inv48-150 { color: #afd787; } +.ansi38-151 { color: #afd7af; } +.inv38-151 { background: #afd7af; } +.ansi48-151 { background: #afd7af; } +.inv48-151 { color: #afd7af; } +.ansi38-152 { color: #afd7d7; } +.inv38-152 { background: #afd7d7; } +.ansi48-152 { background: #afd7d7; } +.inv48-152 { color: #afd7d7; } +.ansi38-153 { color: #afd7ff; } +.inv38-153 { background: #afd7ff; } +.ansi48-153 { background: #afd7ff; } +.inv48-153 { color: #afd7ff; } +.ansi38-184 { color: #d7d700; } +.inv38-184 { background: #d7d700; } +.ansi48-184 { background: #d7d700; } +.inv48-184 { color: #d7d700; } +.ansi38-185 { color: #d7d75f; } +.inv38-185 { background: #d7d75f; } +.ansi48-185 { background: #d7d75f; } +.inv48-185 { color: #d7d75f; } +.ansi38-186 { color: #d7d787; } +.inv38-186 { background: #d7d787; } +.ansi48-186 { background: #d7d787; } +.inv48-186 { color: #d7d787; } +.ansi38-187 { color: #d7d7af; } +.inv38-187 { background: #d7d7af; } +.ansi48-187 { background: #d7d7af; } +.inv48-187 { color: #d7d7af; } +.ansi38-188 { color: #d7d7d7; } +.inv38-188 { background: #d7d7d7; } +.ansi48-188 { background: #d7d7d7; } +.inv48-188 { color: #d7d7d7; } +.ansi38-189 { color: #d7d7ff; } +.inv38-189 { background: #d7d7ff; } +.ansi48-189 { background: #d7d7ff; } +.inv48-189 { color: #d7d7ff; } +.ansi38-220 { color: #ffd700; } +.inv38-220 { background: #ffd700; } +.ansi48-220 { background: #ffd700; } +.inv48-220 { color: #ffd700; } +.ansi38-221 { color: #ffd75f; } +.inv38-221 { background: #ffd75f; } +.ansi48-221 { background: #ffd75f; } +.inv48-221 { color: #ffd75f; } +.ansi38-222 { color: #ffd787; } +.inv38-222 { background: #ffd787; } +.ansi48-222 { background: #ffd787; } +.inv48-222 { color: #ffd787; } +.ansi38-223 { color: #ffd7af; } +.inv38-223 { background: #ffd7af; } +.ansi48-223 { background: #ffd7af; } +.inv48-223 { color: #ffd7af; } +.ansi38-224 { color: #ffd7d7; } +.inv38-224 { background: #ffd7d7; } +.ansi48-224 { background: #ffd7d7; } +.inv48-224 { color: #ffd7d7; } +.ansi38-225 { color: #ffd7ff; } +.inv38-225 { background: #ffd7ff; } +.ansi48-225 { background: #ffd7ff; } +.inv48-225 { color: #ffd7ff; } +.ansi38-46 { color: #00ff00; } +.inv38-46 { background: #00ff00; } +.ansi48-46 { background: #00ff00; } +.inv48-46 { color: #00ff00; } +.ansi38-47 { color: #00ff5f; } +.inv38-47 { background: #00ff5f; } +.ansi48-47 { background: #00ff5f; } +.inv48-47 { color: #00ff5f; } +.ansi38-48 { color: #00ff87; } +.inv38-48 { background: #00ff87; } +.ansi48-48 { background: #00ff87; } +.inv48-48 { color: #00ff87; } +.ansi38-49 { color: #00ffaf; } +.inv38-49 { background: #00ffaf; } +.ansi48-49 { background: #00ffaf; } +.inv48-49 { color: #00ffaf; } +.ansi38-50 { color: #00ffd7; } +.inv38-50 { background: #00ffd7; } +.ansi48-50 { background: #00ffd7; } +.inv48-50 { color: #00ffd7; } +.ansi38-51 { color: #00ffff; } +.inv38-51 { background: #00ffff; } +.ansi48-51 { background: #00ffff; } +.inv48-51 { color: #00ffff; } +.ansi38-82 { color: #5fff00; } +.inv38-82 { background: #5fff00; } +.ansi48-82 { background: #5fff00; } +.inv48-82 { color: #5fff00; } +.ansi38-83 { color: #5fff5f; } +.inv38-83 { background: #5fff5f; } +.ansi48-83 { background: #5fff5f; } +.inv48-83 { color: #5fff5f; } +.ansi38-84 { color: #5fff87; } +.inv38-84 { background: #5fff87; } +.ansi48-84 { background: #5fff87; } +.inv48-84 { color: #5fff87; } +.ansi38-85 { color: #5fffaf; } +.inv38-85 { background: #5fffaf; } +.ansi48-85 { background: #5fffaf; } +.inv48-85 { color: #5fffaf; } +.ansi38-86 { color: #5fffd7; } +.inv38-86 { background: #5fffd7; } +.ansi48-86 { background: #5fffd7; } +.inv48-86 { color: #5fffd7; } +.ansi38-87 { color: #5fffff; } +.inv38-87 { background: #5fffff; } +.ansi48-87 { background: #5fffff; } +.inv48-87 { color: #5fffff; } +.ansi38-118 { color: #87ff00; } +.inv38-118 { background: #87ff00; } +.ansi48-118 { background: #87ff00; } +.inv48-118 { color: #87ff00; } +.ansi38-119 { color: #87ff5f; } +.inv38-119 { background: #87ff5f; } +.ansi48-119 { background: #87ff5f; } +.inv48-119 { color: #87ff5f; } +.ansi38-120 { color: #87ff87; } +.inv38-120 { background: #87ff87; } +.ansi48-120 { background: #87ff87; } +.inv48-120 { color: #87ff87; } +.ansi38-121 { color: #87ffaf; } +.inv38-121 { background: #87ffaf; } +.ansi48-121 { background: #87ffaf; } +.inv48-121 { color: #87ffaf; } +.ansi38-122 { color: #87ffd7; } +.inv38-122 { background: #87ffd7; } +.ansi48-122 { background: #87ffd7; } +.inv48-122 { color: #87ffd7; } +.ansi38-123 { color: #87ffff; } +.inv38-123 { background: #87ffff; } +.ansi48-123 { background: #87ffff; } +.inv48-123 { color: #87ffff; } +.ansi38-154 { color: #afff00; } +.inv38-154 { background: #afff00; } +.ansi48-154 { background: #afff00; } +.inv48-154 { color: #afff00; } +.ansi38-155 { color: #afff5f; } +.inv38-155 { background: #afff5f; } +.ansi48-155 { background: #afff5f; } +.inv48-155 { color: #afff5f; } +.ansi38-156 { color: #afff87; } +.inv38-156 { background: #afff87; } +.ansi48-156 { background: #afff87; } +.inv48-156 { color: #afff87; } +.ansi38-157 { color: #afffaf; } +.inv38-157 { background: #afffaf; } +.ansi48-157 { background: #afffaf; } +.inv48-157 { color: #afffaf; } +.ansi38-158 { color: #afffd7; } +.inv38-158 { background: #afffd7; } +.ansi48-158 { background: #afffd7; } +.inv48-158 { color: #afffd7; } +.ansi38-159 { color: #afffff; } +.inv38-159 { background: #afffff; } +.ansi48-159 { background: #afffff; } +.inv48-159 { color: #afffff; } +.ansi38-190 { color: #d7ff00; } +.inv38-190 { background: #d7ff00; } +.ansi48-190 { background: #d7ff00; } +.inv48-190 { color: #d7ff00; } +.ansi38-191 { color: #d7ff5f; } +.inv38-191 { background: #d7ff5f; } +.ansi48-191 { background: #d7ff5f; } +.inv48-191 { color: #d7ff5f; } +.ansi38-192 { color: #d7ff87; } +.inv38-192 { background: #d7ff87; } +.ansi48-192 { background: #d7ff87; } +.inv48-192 { color: #d7ff87; } +.ansi38-193 { color: #d7ffaf; } +.inv38-193 { background: #d7ffaf; } +.ansi48-193 { background: #d7ffaf; } +.inv48-193 { color: #d7ffaf; } +.ansi38-194 { color: #d7ffd7; } +.inv38-194 { background: #d7ffd7; } +.ansi48-194 { background: #d7ffd7; } +.inv48-194 { color: #d7ffd7; } +.ansi38-195 { color: #d7ffff; } +.inv38-195 { background: #d7ffff; } +.ansi48-195 { background: #d7ffff; } +.inv48-195 { color: #d7ffff; } +.ansi38-226 { color: #ffff00; } +.inv38-226 { background: #ffff00; } +.ansi48-226 { background: #ffff00; } +.inv48-226 { color: #ffff00; } +.ansi38-227 { color: #ffff5f; } +.inv38-227 { background: #ffff5f; } +.ansi48-227 { background: #ffff5f; } +.inv48-227 { color: #ffff5f; } +.ansi38-228 { color: #ffff87; } +.inv38-228 { background: #ffff87; } +.ansi48-228 { background: #ffff87; } +.inv48-228 { color: #ffff87; } +.ansi38-229 { color: #ffffaf; } +.inv38-229 { background: #ffffaf; } +.ansi48-229 { background: #ffffaf; } +.inv48-229 { color: #ffffaf; } +.ansi38-230 { color: #ffffd7; } +.inv38-230 { background: #ffffd7; } +.ansi48-230 { background: #ffffd7; } +.inv48-230 { color: #ffffd7; } +.ansi38-231 { color: #ffffff; } +.inv38-231 { background: #ffffff; } +.ansi48-231 { background: #ffffff; } +.inv48-231 { color: #ffffff; } .ansi38-232 { color: #080808; } .inv38-232 { background: #080808; } .ansi48-232 { background: #080808; } diff --git a/tests/test_ansi2html.py b/tests/test_ansi2html.py old mode 100755 new mode 100644 index 788127e..5329266 --- a/tests/test_ansi2html.py +++ b/tests/test_ansi2html.py @@ -21,21 +21,29 @@ # along with this program. If not, see # . +import textwrap +import unittest +from io import StringIO from os.path import abspath, dirname, join -from ansi2html import Ansi2HTMLConverter -from ansi2html.converter import main, \ - ANSI_VISIBILITY_ON, ANSI_VISIBILITY_OFF, \ - ANSI_BLINK_SLOW, ANSI_BLINK_FAST, ANSI_BLINK_OFF, \ - ANSI_NEGATIVE_ON, ANSI_NEGATIVE_OFF, \ - ANSI_INTENSITY_INCREASED, ANSI_INTENSITY_REDUCED, ANSI_INTENSITY_NORMAL -from ansi2html.util import read_to_unicode +from subprocess import run from mock import patch -from nose.tools import eq_ -import unittest -import six -import textwrap +from ansi2html import Ansi2HTMLConverter +from ansi2html.converter import ( + ANSI_BLINK_FAST, + ANSI_BLINK_OFF, + ANSI_BLINK_SLOW, + ANSI_INTENSITY_INCREASED, + ANSI_INTENSITY_NORMAL, + ANSI_INTENSITY_REDUCED, + ANSI_NEGATIVE_OFF, + ANSI_NEGATIVE_ON, + ANSI_VISIBILITY_OFF, + ANSI_VISIBILITY_ON, + main, +) +from ansi2html.util import read_to_unicode _here = dirname(abspath(__file__)) @@ -47,35 +55,37 @@ def test_linkify(self): ansi = "http://threebean.org" target = 'http://threebean.org' html = Ansi2HTMLConverter(linkify=True).convert(ansi) - assert(target in html) + assert target in html def test_not_linkify(self): ansi = "http://threebean.org" target = 'http://threebean.org' html = Ansi2HTMLConverter().convert(ansi) - assert(target not in html) + assert target not in html def test_conversion(self): for input_filename, expected_output_filename in ( - ("ansicolor.txt", "ansicolor.html"), - ("ansicolor_eix.txt", "ansicolor_eix.html"), - ): + ("ansicolor.txt", "ansicolor.html"), + ("ansicolor_eix.txt", "ansicolor_eix.html"), + ): with open(join(_here, input_filename), "rb") as input: test_data = "".join(read_to_unicode(input)) with open(join(_here, expected_output_filename), "rb") as output: - expected_data = [e.rstrip('\n') for e in read_to_unicode(output)] - - html = Ansi2HTMLConverter().convert(test_data, ensure_trailing_newline=True).split("\n") - if html and html[-1] == '': + expected_data = [e.rstrip("\n") for e in read_to_unicode(output)] + + html = ( + Ansi2HTMLConverter() + .convert(test_data, ensure_trailing_newline=True) + .split("\n") + ) + if html and html[-1] == "": html = html[:-1] - self.assertEqual( - '\n'.join(html), - '\n'.join(expected_data)) + self.assertEqual("\n".join(html), "\n".join(expected_data)) @patch("sys.argv", new_callable=lambda: ["ansi2html"]) - @patch("sys.stdout", new_callable=six.StringIO) + @patch("sys.stdout", new_callable=StringIO) def test_conversion_as_command(self, mock_stdout, mock_argv): with open(join(_here, "ansicolor.txt"), "rb") as input: test_data = "".join(read_to_unicode(input)) @@ -83,10 +93,8 @@ def test_conversion_as_command(self, mock_stdout, mock_argv): with open(join(_here, "ansicolor.html"), "rb") as output: expected_data = "".join(read_to_unicode(output)) - if six.PY3: - f = lambda: six.StringIO(test_data) - else: - f = lambda: six.StringIO(test_data.encode('utf-8')) + def f(): + return StringIO(test_data) with patch("sys.stdin", new_callable=f): main() @@ -104,75 +112,84 @@ def test_unicode(self): html = Ansi2HTMLConverter().convert(test_data).split("\n") for chunk in html: - assert isinstance(chunk, six.text_type) + assert isinstance(chunk, str) @patch("sys.argv", new_callable=lambda: ["ansi2html", "--inline"]) - @patch("sys.stdout", new_callable=six.StringIO) + @patch("sys.stdout", new_callable=StringIO) def test_inline_as_command(self, mock_stdout, mock_argv): - test_input = textwrap.dedent(six.u(""" + test_input = textwrap.dedent( + """ this is a test - """)) + """ + ) - with patch("sys.stdin", new_callable=lambda: six.StringIO(test_input)): + with patch("sys.stdin", new_callable=lambda: StringIO(test_input)): main() - eq_(mock_stdout.getvalue(), test_input) + ms_val = mock_stdout.getvalue() + assert ms_val == test_input, "%r != %r" % (ms_val, test_input) @patch("sys.argv", new_callable=lambda: ["ansi2html", "--partial"]) - @patch("sys.stdout", new_callable=six.StringIO) + @patch("sys.stdout", new_callable=StringIO) def test_partial_as_command(self, mock_stdout, mock_argv): - rainbow = '\x1b[1m\x1b[40m\x1b[31mr\x1b[32ma\x1b[33mi\x1b[34mn\x1b[35mb\x1b[36mo\x1b[37mw\x1b[0m\n' - with patch("sys.stdin", new_callable=lambda: six.StringIO(rainbow)): + rainbow = "\x1b[1m\x1b[40m\x1b[31mr\x1b[32ma\x1b[33mi\x1b[34mn\x1b[35mb\x1b[36mo\x1b[37mw\x1b[0m\n" + with patch("sys.stdin", new_callable=lambda: StringIO(rainbow)): main() html = mock_stdout.getvalue().strip() - if hasattr(html, 'decode'): - html = html.decode('utf-8') - - expected = (six.u('') + - six.u('') + - six.u('r') + - six.u('a') + - six.u('i') + - six.u('n') + - six.u('b') + - six.u('o') + - six.u('w')) - assert isinstance(html, six.text_type) - assert isinstance(expected, six.text_type) + if hasattr(html, "decode"): + html = html.decode("utf-8") + + expected = ( + '' + + '' + + 'r' + + 'a' + + 'i' + + 'n' + + 'b' + + 'o' + + 'w' + ) + assert isinstance(html, str) + assert isinstance(expected, str) self.assertEqual(expected, html) def test_partial(self): - rainbow = '\x1b[1m\x1b[40m\x1b[31mr\x1b[32ma\x1b[33mi\x1b[34mn\x1b[35mb\x1b[36mo\x1b[37mw\x1b[0m\n' + rainbow = "\x1b[1m\x1b[40m\x1b[31mr\x1b[32ma\x1b[33mi\x1b[34mn\x1b[35mb\x1b[36mo\x1b[37mw\x1b[0m\n" html = Ansi2HTMLConverter().convert(rainbow, full=False).strip() - expected = (six.u('') + - six.u('') + - six.u('r') + - six.u('a') + - six.u('i') + - six.u('n') + - six.u('b') + - six.u('o') + - six.u('w')) + expected = ( + '' + + '' + + 'r' + + 'a' + + 'i' + + 'n' + + 'b' + + 'o' + + 'w' + ) self.assertEqual(expected, html) def test_inline(self): - rainbow = '\x1b[1m\x1b[40m\x1b[31mr\x1b[32ma\x1b[33mi\x1b[34mn\x1b[35mb\x1b[36mo\x1b[37mw\x1b[0m' + rainbow = "\x1b[1m\x1b[40m\x1b[31mr\x1b[32ma\x1b[33mi\x1b[34mn\x1b[35mb\x1b[36mo\x1b[37mw\x1b[0m" html = Ansi2HTMLConverter(inline=True).convert(rainbow, full=False) - expected = (six.u('') + - six.u('') + - six.u('r') + - six.u('a') + - six.u('i') + - six.u('n') + - six.u('b') + - six.u('o') + - six.u('w')) + expected = ( + '' + + '' + + 'r' + + 'a' + + 'i' + + 'n' + + 'b' + + 'o' + + 'w' + ) self.assertEqual(expected, html) @@ -184,7 +201,7 @@ def test_produce_headers(self): with open(inputfile, "rb") as produce_headers: expected_data = read_to_unicode(produce_headers) - self.assertMultiLineEqual(headers, ''.join(expected_data)) + self.assertMultiLineEqual(headers, "".join(expected_data)) def test_escaped_implicit(self): test = "

awesome

" @@ -217,120 +234,166 @@ def test_no_markup_lines(self): self.assertEqual(expected, html) def test_issue_25(self): - sample = '\x1b[0;38;5;238;48;5;231mTEXT\x1b[0m' + sample = "\x1b[0;38;5;238;48;5;231mTEXT\x1b[0m" html = Ansi2HTMLConverter(inline=False).convert(sample, full=False) - expected = six.u('TEXT') + expected = 'TEXT' self.assertEqual(expected, html) def test_italic(self): - sample = '\x1b[3mITALIC\x1b[0m' + sample = "\x1b[3mITALIC\x1b[0m" html = Ansi2HTMLConverter(inline=True).convert(sample, full=False) - expected = six.u('ITALIC') + expected = 'ITALIC' self.assertEqual(expected, html) def test_hidden_text(self): - sample = '\x1b[%dmHIDDEN\x1b[%dmVISIBLE\x1b[0m' % (ANSI_VISIBILITY_OFF, ANSI_VISIBILITY_ON) + sample = "\x1b[%dmHIDDEN\x1b[%dmVISIBLE\x1b[0m" % ( + ANSI_VISIBILITY_OFF, + ANSI_VISIBILITY_ON, + ) html = Ansi2HTMLConverter(inline=True).convert(sample, full=False) - expected = six.u('HIDDENVISIBLE') + expected = 'HIDDENVISIBLE' self.assertEqual(expected, html) def test_lighter_text(self): - sample = 'NORMAL\x1b[%dmLIGHTER\x1b[%dmBOLD\x1b[%dmNORMAL' % (ANSI_INTENSITY_REDUCED, ANSI_INTENSITY_INCREASED, ANSI_INTENSITY_NORMAL) + sample = "NORMAL\x1b[%dmLIGHTER\x1b[%dmBOLD\x1b[%dmNORMAL" % ( + ANSI_INTENSITY_REDUCED, + ANSI_INTENSITY_INCREASED, + ANSI_INTENSITY_NORMAL, + ) html = Ansi2HTMLConverter(inline=True).convert(sample, full=False) - expected = six.u('NORMALLIGHTERBOLDNORMAL') + expected = 'NORMALLIGHTERBOLDNORMAL' self.assertEqual(expected, html) def test_blinking_text(self): - sample = '\x1b[%dm555\x1b[%dm666\x1b[%dmNOBLINK\x1b[0m' % (ANSI_BLINK_SLOW, ANSI_BLINK_FAST, ANSI_BLINK_OFF) + sample = "\x1b[%dm555\x1b[%dm666\x1b[%dmNOBLINK\x1b[0m" % ( + ANSI_BLINK_SLOW, + ANSI_BLINK_FAST, + ANSI_BLINK_OFF, + ) html = Ansi2HTMLConverter(inline=True).convert(sample, full=False) - expected = six.u('555666NOBLINK') + expected = '555666NOBLINK' self.assertEqual(expected, html) html = Ansi2HTMLConverter(inline=False).convert(sample, full=False) - expected = six.u('555666NOBLINK') + expected = '555666NOBLINK' self.assertEqual(expected, html) def test_inverse_text(self): - sample = 'NORMAL\x1b[%dmINVERSE\x1b[%dmNORMAL\x1b[0m' % (ANSI_NEGATIVE_ON, ANSI_NEGATIVE_OFF) + sample = "NORMAL\x1b[%dmINVERSE\x1b[%dmNORMAL\x1b[0m" % ( + ANSI_NEGATIVE_ON, + ANSI_NEGATIVE_OFF, + ) html = Ansi2HTMLConverter(inline=False).convert(sample, full=False) - expected = six.u('NORMALINVERSENORMAL') + expected = ( + 'NORMALINVERSENORMAL' + ) self.assertEqual(expected, html) - sample = 'NORMAL\x1b[%dm303030\x1b[%dm!30!30!30\x1b[%dm303030\x1b[0m' % (30, ANSI_NEGATIVE_ON, ANSI_NEGATIVE_OFF) + sample = "NORMAL\x1b[%dm303030\x1b[%dm!30!30!30\x1b[%dm303030\x1b[0m" % ( + 30, + ANSI_NEGATIVE_ON, + ANSI_NEGATIVE_OFF, + ) html = Ansi2HTMLConverter(inline=False).convert(sample, full=False) - expected = six.u('NORMAL303030!30!30!30303030') + expected = 'NORMAL303030!30!30!30303030' self.assertEqual(expected, html) - sample = 'NORMAL\x1b[%dm313131\x1b[%dm!31!31!31\x1b[%dm!31!43\x1b[%dm31+43\x1b[0mNORMAL' % (31, ANSI_NEGATIVE_ON, 43, ANSI_NEGATIVE_OFF) + sample = ( + "NORMAL\x1b[%dm313131\x1b[%dm!31!31!31\x1b[%dm!31!43\x1b[%dm31+43\x1b[0mNORMAL" + % (31, ANSI_NEGATIVE_ON, 43, ANSI_NEGATIVE_OFF) + ) html = Ansi2HTMLConverter(inline=False).convert(sample, full=False) - expected = six.u('NORMAL313131!31!31!31!31!4331+43NORMAL') + expected = 'NORMAL313131!31!31!31!31!4331+43NORMAL' self.assertEqual(expected, html) def test_cross_line_state(self): # covers issue 36, too - sample = '\x1b[31mRED\nSTILL RED' - html = Ansi2HTMLConverter(inline=True).convert(sample, full=False, ensure_trailing_newline=False) - expected = six.u('RED\nSTILL RED') + sample = "\x1b[31mRED\nSTILL RED" + html = Ansi2HTMLConverter(inline=True).convert( + sample, full=False, ensure_trailing_newline=False + ) + expected = 'RED\nSTILL RED' self.assertEqual(expected, html) - sample = '\x1b[31mRED\nSTILL RED\n' - html = Ansi2HTMLConverter(inline=True).convert(sample, full=False, ensure_trailing_newline=False) - expected = six.u('RED\nSTILL RED\n') + sample = "\x1b[31mRED\nSTILL RED\n" + html = Ansi2HTMLConverter(inline=True).convert( + sample, full=False, ensure_trailing_newline=False + ) + expected = 'RED\nSTILL RED\n' self.assertEqual(expected, html) - sample = '\x1b[31mRED\nSTILL RED' - html = Ansi2HTMLConverter(inline=True).convert(sample, full=False, ensure_trailing_newline=True) - expected = six.u('RED\nSTILL RED\n') + sample = "\x1b[31mRED\nSTILL RED" + html = Ansi2HTMLConverter(inline=True).convert( + sample, full=False, ensure_trailing_newline=True + ) + expected = 'RED\nSTILL RED\n' self.assertEqual(expected, html) - sample = '\x1b[31mRED\nSTILL RED\n' - html = Ansi2HTMLConverter(inline=True).convert(sample, full=False, ensure_trailing_newline=True) - expected = six.u('RED\nSTILL RED\n\n') + sample = "\x1b[31mRED\nSTILL RED\n" + html = Ansi2HTMLConverter(inline=True).convert( + sample, full=False, ensure_trailing_newline=True + ) + expected = 'RED\nSTILL RED\n\n' self.assertEqual(expected, html) - sample = '\x1b[31mRED\nSTILL RED\x1b[m\n' - html = Ansi2HTMLConverter(inline=True).convert(sample, full=False, ensure_trailing_newline=True) - expected = six.u('RED\nSTILL RED\n') + sample = "\x1b[31mRED\nSTILL RED\x1b[m\n" + html = Ansi2HTMLConverter(inline=True).convert( + sample, full=False, ensure_trailing_newline=True + ) + expected = 'RED\nSTILL RED\n' self.assertEqual(expected, html) def test_scheme(self): # covers issue 36, too - sample = '\x1b[33mYELLOW/BROWN' + sample = "\x1b[33mYELLOW/BROWN" # ansi2html scheme is brown #aa5500 - html = Ansi2HTMLConverter(inline=True).convert(sample, full=False, ensure_trailing_newline=False) - expected = six.u('YELLOW/BROWN') + html = Ansi2HTMLConverter(inline=True).convert( + sample, full=False, ensure_trailing_newline=False + ) + expected = 'YELLOW/BROWN' self.assertEqual(expected, html) # xterm scheme is yellow #cdcd00 - html = Ansi2HTMLConverter(inline=True, scheme='xterm').convert(sample, full=False, ensure_trailing_newline=False) - expected = six.u('YELLOW/BROWN') + html = Ansi2HTMLConverter(inline=True, scheme="xterm").convert( + sample, full=False, ensure_trailing_newline=False + ) + expected = 'YELLOW/BROWN' self.assertEqual(expected, html) def test_latex_inline(self): - ansi = '\x1b[33mYELLOW/BROWN' - target = '\\textcolor[HTML]{aa5500}{YELLOW/BROWN}' + ansi = "\x1b[33mYELLOW/BROWN" + target = "\\textcolor[HTML]{aa5500}{YELLOW/BROWN}" latex = Ansi2HTMLConverter(latex=True, inline=True).convert(ansi) - assert(target in latex) + assert target in latex def test_latex_title(self): - ansi = '' - title = 'testing' - target = '\\title{%s}' % title + ansi = "" + title = "testing" + target = "\\title{%s}" % title latex = Ansi2HTMLConverter(latex=True, inline=True, title=title).convert(ansi) - assert(target in latex) + assert target in latex def test_latex_linkify(self): - ansi = 'http://python.org/' - target = '\\url{%s}' % ansi + ansi = "http://python.org/" + target = "\\url{%s}" % ansi latex = Ansi2HTMLConverter(latex=True, inline=True, linkify=True).convert(ansi) - assert(target in latex) + assert target in latex + + def test_command_script(self): + result = run(["ansi2html", "--version"], check=True) + assert result.returncode == 0 + + def test_command_module(self): + result = run(["python3", "-m", "ansi2html", "--version"], check=True) + assert result.returncode == 0 + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/tox.ini b/tox.ini index fb6e585..2b911cf 100644 --- a/tox.ini +++ b/tox.ini @@ -1,16 +1,55 @@ [tox] -envlist = py{27,35,36} -downloadcache = {toxworkdir}/_download/ +minversion = 3.9.0 +envlist = + lint + py{36,37,38,39} + packaging [testenv] -recreate = True -basepython = - py27: python2.7 - py35: python3.5 - py36: python3.6 +setenv = + PYTHONWARNINGS=error::FutureWarning + # Aim to replace with below once other issues are fixed: + # PYTHONWARNINGS=error deps = - nose mock sitepackages = False commands = - nosetests tests/test_ansi2html.py + python -m unittest tests/test_ansi2html.py + +[testenv:lint] +description = Runs all linting tasks +commands = + # to run a single linter you can do "pre-commit run flake8" + python -m pre_commit run {posargs:--all} +deps = pre-commit>=1.18.1 +extras = +skip_install = true +usedevelop = false + +[testenv:packaging] +description = + Do packaging/distribution. If tag is not present or PEP440 compliant upload to + PYPI could fail +# `usedevelop = true` overrides `skip_install` instruction, it's unwanted +usedevelop = false +# don't install molecule itself in this env +skip_install = true +deps = + collective.checkdocs >= 0.2 + pep517 >= 0.8.2 + pip >= 20.2.2 + toml >= 0.10.1 + twine >= 3.2.0 # pyup: ignore +setenv = +commands = + rm -rfv {toxinidir}/dist/ + python -m pep517.build \ + --source \ + --binary \ + --out-dir {toxinidir}/dist/ \ + {toxinidir} + # metadata validation + sh -c "python -m twine check {toxinidir}/dist/*" +whitelist_externals = + rm + sh