uxdiff


Nameuxdiff JSON
Version 1.5.2 PyPI version JSON
download
home_pagehttps://github.com/tanaga9/uxdiff
SummaryAs a command, Compare two text files or directories. As a module, Compare two sequences of hashable objects.
upload_time2023-11-05 17:46:29
maintainer
docs_urlNone
authorTanaga
requires_python
licenseMIT
keywords colored side-by-side diff
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
uxdiff
******

Compares the two sequences well and outputs the difference.
Improves text comparison in GUI-less environments.


Overview
========


Install
-------

.. code-block:: shell

   pip install uxdiff


Example
-------

text1.txt

.. code-block:: text

     1. Beautiful is better than ugly.
     2. Explicit is better than implicit.
     3. Simple is better than complex.
     4. Complex is better than complicated.

text2.txt

.. code-block:: text

     1. Beautiful is better than ugly.
     3.   Simple is better than complex.
     4. Complicated is better than complex.
     5. Flat is better than nested.

compare

.. code-block:: shell

   uxdiff text1.txt text2.txt --color never

.. code-block:: text

   --- text1.txt (utf-8)
   +++ text2.txt (utf-8)
        1      1|     1. Beautiful is better than ugly.
        2       | -   2. Explicit is better than implicit.
        3       | -   3. Simple is better than complex.
        4       | -   4. Complex is better than complicated.
               2| +   3.   Simple is better than complex.
               3| +   4. Complicated is better than complex.
               4| +   5. Flat is better than nested.

   [     ]      |    ++                                
   [ <-  ]     3|  3.   Simple is better than complex. 
   [  -> ]     2|  3.   Simple is better than complex. 

   [     ]      |          ++++ !                     ---- !  
   [ <-  ]     4|  4. Compl    ex is better than complicated. 
   [  -> ]     3|  4. Complicated is better than compl    ex.

supported multi-byte string. set the encoding with an argument if you need.

See more `examples <https://github.com/tanaga9/uxdiff/blob/master/docs/example.ipynb>`_


Usage
-----

.. code-block:: text

   usage: uxdiff [-h] [--version] [-y] [-f] [-c NUM] [-w WIDTH] [-r]
                 [--linejunk LINEJUNK] [--charjunk CHARJUNK] [--cutoff RATIO]
                 [--fuzzy RATIO] [--cutoffchar] [--enc-file1 ENCODING]
                 [--enc-file2 ENCODING] [--enc-stdin ENCODING]
                 [--enc-stdout ENCODING] [--enc-filepath ENCODING]
                 [--ignore-crlf] [--color [WHEN]] [--no-color] [--withbg]
                 [file_or_dir_1] [file_or_dir_2]

   positional arguments:
     file_or_dir_1         file or dir 1
     file_or_dir_2         file or dir 2

   options:
     -h, --help            show this help message and exit
     --version             show program's version number and exit
     -y, -s, --side-by-side
                           output in two columns
     -f, --full            Fulltext diff (default False) (disable context option)
     -c NUM, --context NUM
                           Set number of context lines (default 5)
     -w WIDTH, --width WIDTH
                           Set number of width (default auto(or 130))
     -r, --recursive       Recursively compare any subdirectories found. (default
                           False) (enable only compare directories)
     --linejunk LINEJUNK   linejunk
     --charjunk CHARJUNK   charjunk
     --cutoff RATIO        Set number of cutoff ratio (default 0.75)
                           (0.0<=ratio<=1.0)
     --fuzzy RATIO         Set number of fuzzy matching ratio (default 0.0)
                           (0.0<=ratio<=1.0)
     --cutoffchar          Cutoff character in line diffs (default False)
     --enc-file1 ENCODING  Set encoding of leftside inputfile1 (default utf-8)
     --enc-file2 ENCODING  Set encoding of rightside inputfile2 (default utf-8)
     --enc-stdin ENCODING  Set encoding of standard input (default
                           `defaultencoding`)
     --enc-stdout ENCODING
                           Set encoding of standard output (default
                           `defaultencoding`)
     --enc-filepath ENCODING
                           Set encoding of filepath (default `defaultencoding`)
     --ignore-crlf         Ignore carriage return ('\r') and line feed ('\n')
                           (default False)
     --color [WHEN]        Show colored diff. --color is the same as
                           --color=always. WHEN can be one of always, never, or
                           auto. (default auto)
     --no-color            Turn off colored diff. override color option if both.
                           (default False)
     --withbg              Colored diff with background color. It will be ignored
                           if no-color option. (default False)


License
-------

`The MIT License (MIT) <http://www.opensource.org/licenses/mit-license.php>`_


Module interface
================

Compare two text files or directories (or sequences); generate the differences.

+-----------------+----------------------------+-------------------------------------+
| Environment     | Diff Representation        | target of the intended compare      |
+=================+============================+=====================================+
| ANSI terminal   | ANSI escape code (color)   | two text files or directories       |
+-----------------+----------------------------+-------------------------------------+
| Jupyter         | HTML Table                 | two sequences of hashable objects   |
+-----------------+----------------------------+-------------------------------------+

**uxdiff.tabulate(diffs, truncate=None)**

   Output the detected difference as an HTML table (for Jupyter).

**class uxdiff.Differ(linejunk=None, charjunk=None, cutoff=0.75, fuzzy=0.0, cutoffchar=False, context=3)**

   Differ is a class for comparing sequences.

   Differ uses SequenceMatcher both to compare sequences.

   **compare(seq1, seq2)**

      Compare two sequences; return a generator of differences.

      Requirement is

      * both sequences must be iterable (no generator).

      * items in a sequence must be (recursively) hashable.

      If the items of a sequences are iterable, detect similar ones as needed.

      * Examples of hashable and iterable object (containing only hashable objects)
           * string

           * bytes

           * tuple

           * namedtuple (e.g., using pandas.DataFrame.itertuples())

           * …

      Example:

      >>> import pprint
      >>>
      >>> pprint.pprint(list(Differ().compare([
      ...    1, 2, 3, (4, 5), 6, 7, 8
      ... ], [
      ...    1, 2, 33, 4, 5, 6, 7, 8
      ... ])))
      [True,
       ((' ', 0, 1, 0, 1), None),
       ((' ', 1, 2, 1, 2), None),
       False,
       True,
       (('|', 2, 3, 2, 33), None),
       (('|', 3, (4, 5), 3, 4), None),
       (('>', None, None, 4, 5), None),
       False,
       True,
       ((' ', 4, 6, 5, 6), None),
       ((' ', 5, 7, 6, 7), None),
       ((' ', 6, 8, 7, 8), None),
       False]
      >>>
      >>> text1 = '''one
      ... two
      ... three
      ... '''.splitlines(1)
      >>>
      >>> text2 = '''ore
      ... tree
      ... emu
      ... '''.splitlines(1)
      >>>
      >>> pprint.pprint(list(Differ().compare(text1, text2)), width=100)
      [True,
       (('>', None, None, 0, 'ore\n'), None),
       (('<', 0, 'one\n', None, None), None),
       (('<', 1, 'two\n', None, None), None),
       (('|', 2, 'three\n', 1, 'tree\n'), [(' ', 't', 't'), ('-', 'h', None), (' ', 'ree\n', 'ree\n')]),
       (('>', None, None, 2, 'emu\n'), None),
       False]
      >>>
      >>> # like sdiff
      >>> pprint.pprint(list(Differ(cutoff=0, fuzzy=1).compare(text1, text2)), width=100)
      [True,
       (('|', 0, 'one\n', 0, 'ore\n'), [(' ', 'o', 'o'), ('!', 'n', 'r'), (' ', 'e\n', 'e\n')]),
       (('|', 1, 'two\n', 1, 'tree\n'), [(' ', 't', 't'), ('!', 'wo', 'ree'), (' ', '\n', '\n')]),
       (('|', 2, 'three\n', 2, 'emu\n'),
        [('-', 'thr', None), (' ', 'e', 'e'), ('!', 'e', 'mu'), (' ', '\n', '\n')]),
       False]
      >>>
      >>> text1 = '''  1. Beautiful is better than ugly.
      ...   2. Explicit is better than implicit.
      ...   3. Simple is better than complex.
      ...   4. Complex is better than complicated.
      ... '''.splitlines(1)
      >>>
      >>> text2 = '''  1. Beautiful is better than ugly.
      ...   3.   Simple is better than complex.
      ...   4. Complicated is better than complex.
      ...   5. Flat is better than nested.
      ... '''.splitlines(1)
      >>>
      >>> diff = Differ().compare(text1, text2)
      >>> pprint.pprint(list(diff), width=120)
      [True,
       ((' ', 0, '  1. Beautiful is better than ugly.\n', 0, '  1. Beautiful is better than ugly.\n'), None),
       False,
       True,
       (('<', 1, '  2. Explicit is better than implicit.\n', None, None), None),
       (('|', 2, '  3. Simple is better than complex.\n', 1, '  3.   Simple is better than complex.\n'),
        [(' ', '  3.', '  3.'),
         ('+', None, '  '),
         (' ', ' Simple is better than complex.\n', ' Simple is better than complex.\n')]),
       (('|', 3, '  4. Complex is better than complicated.\n', 2, '  4. Complicated is better than complex.\n'),
        [(' ', '  4. Compl', '  4. Compl'),
         ('+', None, 'icat'),
         (' ', 'e', 'e'),
         ('!', 'x', 'd'),
         (' ', ' is better than compl', ' is better than compl'),
         ('-', 'icat', None),
         (' ', 'e', 'e'),
         ('!', 'd', 'x'),
         (' ', '.\n', '.\n')]),
       (('>', None, None, 3, '  5. Flat is better than nested.\n'), None),
       False]

      +--------------+----------------------------------------------------------------------------------------------+
      | Yields       | Meaning                                                                                      |
      +==============+==============================================================================================+
      | True         | begin of a group of diff                                                                     |
      +--------------+----------------------------------------------------------------------------------------------+
      | False        | end of a group of diff                                                                       |
      +--------------+----------------------------------------------------------------------------------------------+
      | None         | omitted matches beyond the number of contexts                                                |
      +--------------+----------------------------------------------------------------------------------------------+
      | Tuple        | ((Code, Index1 | None, Item1 | None, Index2 | None, Item2 | None), InlineDiff | None)        |
      +--------------+----------------------------------------------------------------------------------------------+

      +--------------+--------------------------------------+
      | Code         | Meaning                              |
      +==============+======================================+
      | “<”          | unique to sequence 1                 |
      +--------------+--------------------------------------+
      | “>”          | unique to sequence 2                 |
      +--------------+--------------------------------------+
      | “ “          | common to both sequences             |
      +--------------+--------------------------------------+
      | “|”          | different to both sequences          |
      +--------------+--------------------------------------+

      +--------------+----------------------------------------------------------------------+
      | InlineDiff   | Meaning                                                              |
      +==============+======================================================================+
      | None         | There is no InlineDiff (Code is not “|” or items are not iterable)   |
      +--------------+----------------------------------------------------------------------+
      | List         | [(InlineCode, SlicedItem1 | None, SlicedItem2 | None), … ]           |
      +--------------+----------------------------------------------------------------------+

      +--------------+----------------------------------------------------------+
      | InlineCode   | Meaning                                                  |
      +==============+==========================================================+
      | “-”          | unique to inline sequence 1 (item of sequence 1)         |
      +--------------+----------------------------------------------------------+
      | “+”          | unique to inline sequence 2 (item of sequence 2)         |
      +--------------+----------------------------------------------------------+
      | “ “          | common to both inline sequences (item of sequences)      |
      +--------------+----------------------------------------------------------+
      | “!”          | different to both inline sequences (item of sequences)   |
      +--------------+----------------------------------------------------------+

**class uxdiff.LikeUnifiedDiffer(*args, **kwargs)**

   **pretty_compare(lines1, lines2, width=130, withcolor=False, withbg=False, offset1=0, offset2=0)**

      Compare two sequences of string; return a generator of pretty difference representations.

**class uxdiff.SideBySideDiffer(*args, **kwargs)**

   **pretty_compare(lines1, lines2, width=130, withcolor=False, withbg=False, offset1=0, offset2=0)**

      Compare two sequences of string; return a generator of pretty difference representations.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/tanaga9/uxdiff",
    "name": "uxdiff",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "colored side-by-side diff",
    "author": "Tanaga",
    "author_email": "tanaga9@users.noreply.github.com",
    "download_url": "https://files.pythonhosted.org/packages/e2/8f/dbebaa0dfce03cf4b9000876aecd62135df58004d19ba4da2f19f743d162/uxdiff-1.5.2.tar.gz",
    "platform": null,
    "description": "\nuxdiff\n******\n\nCompares the two sequences well and outputs the difference.\nImproves text comparison in GUI-less environments.\n\n\nOverview\n========\n\n\nInstall\n-------\n\n.. code-block:: shell\n\n   pip install uxdiff\n\n\nExample\n-------\n\ntext1.txt\n\n.. code-block:: text\n\n     1. Beautiful is better than ugly.\n     2. Explicit is better than implicit.\n     3. Simple is better than complex.\n     4. Complex is better than complicated.\n\ntext2.txt\n\n.. code-block:: text\n\n     1. Beautiful is better than ugly.\n     3.   Simple is better than complex.\n     4. Complicated is better than complex.\n     5. Flat is better than nested.\n\ncompare\n\n.. code-block:: shell\n\n   uxdiff text1.txt text2.txt --color never\n\n.. code-block:: text\n\n   --- text1.txt (utf-8)\n   +++ text2.txt (utf-8)\n        1      1|     1. Beautiful is better than ugly.\n        2       | -   2. Explicit is better than implicit.\n        3       | -   3. Simple is better than complex.\n        4       | -   4. Complex is better than complicated.\n               2| +   3.   Simple is better than complex.\n               3| +   4. Complicated is better than complex.\n               4| +   5. Flat is better than nested.\n\n   [     ]      |    ++                                \n   [ <-  ]     3|  3.   Simple is better than complex. \n   [  -> ]     2|  3.   Simple is better than complex. \n\n   [     ]      |          ++++ !                     ---- !  \n   [ <-  ]     4|  4. Compl    ex is better than complicated. \n   [  -> ]     3|  4. Complicated is better than compl    ex.\n\nsupported multi-byte string. set the encoding with an argument if you need.\n\nSee more `examples <https://github.com/tanaga9/uxdiff/blob/master/docs/example.ipynb>`_\n\n\nUsage\n-----\n\n.. code-block:: text\n\n   usage: uxdiff [-h] [--version] [-y] [-f] [-c NUM] [-w WIDTH] [-r]\n                 [--linejunk LINEJUNK] [--charjunk CHARJUNK] [--cutoff RATIO]\n                 [--fuzzy RATIO] [--cutoffchar] [--enc-file1 ENCODING]\n                 [--enc-file2 ENCODING] [--enc-stdin ENCODING]\n                 [--enc-stdout ENCODING] [--enc-filepath ENCODING]\n                 [--ignore-crlf] [--color [WHEN]] [--no-color] [--withbg]\n                 [file_or_dir_1] [file_or_dir_2]\n\n   positional arguments:\n     file_or_dir_1         file or dir 1\n     file_or_dir_2         file or dir 2\n\n   options:\n     -h, --help            show this help message and exit\n     --version             show program's version number and exit\n     -y, -s, --side-by-side\n                           output in two columns\n     -f, --full            Fulltext diff (default False) (disable context option)\n     -c NUM, --context NUM\n                           Set number of context lines (default 5)\n     -w WIDTH, --width WIDTH\n                           Set number of width (default auto(or 130))\n     -r, --recursive       Recursively compare any subdirectories found. (default\n                           False) (enable only compare directories)\n     --linejunk LINEJUNK   linejunk\n     --charjunk CHARJUNK   charjunk\n     --cutoff RATIO        Set number of cutoff ratio (default 0.75)\n                           (0.0<=ratio<=1.0)\n     --fuzzy RATIO         Set number of fuzzy matching ratio (default 0.0)\n                           (0.0<=ratio<=1.0)\n     --cutoffchar          Cutoff character in line diffs (default False)\n     --enc-file1 ENCODING  Set encoding of leftside inputfile1 (default utf-8)\n     --enc-file2 ENCODING  Set encoding of rightside inputfile2 (default utf-8)\n     --enc-stdin ENCODING  Set encoding of standard input (default\n                           `defaultencoding`)\n     --enc-stdout ENCODING\n                           Set encoding of standard output (default\n                           `defaultencoding`)\n     --enc-filepath ENCODING\n                           Set encoding of filepath (default `defaultencoding`)\n     --ignore-crlf         Ignore carriage return ('\\r') and line feed ('\\n')\n                           (default False)\n     --color [WHEN]        Show colored diff. --color is the same as\n                           --color=always. WHEN can be one of always, never, or\n                           auto. (default auto)\n     --no-color            Turn off colored diff. override color option if both.\n                           (default False)\n     --withbg              Colored diff with background color. It will be ignored\n                           if no-color option. (default False)\n\n\nLicense\n-------\n\n`The MIT License (MIT) <http://www.opensource.org/licenses/mit-license.php>`_\n\n\nModule interface\n================\n\nCompare two text files or directories (or sequences); generate the differences.\n\n+-----------------+----------------------------+-------------------------------------+\n| Environment     | Diff Representation        | target of the intended compare      |\n+=================+============================+=====================================+\n| ANSI terminal   | ANSI escape code (color)   | two text files or directories       |\n+-----------------+----------------------------+-------------------------------------+\n| Jupyter         | HTML Table                 | two sequences of hashable objects   |\n+-----------------+----------------------------+-------------------------------------+\n\n**uxdiff.tabulate(diffs, truncate=None)**\n\n   Output the detected difference as an HTML table (for Jupyter).\n\n**class uxdiff.Differ(linejunk=None, charjunk=None, cutoff=0.75, fuzzy=0.0, cutoffchar=False, context=3)**\n\n   Differ is a class for comparing sequences.\n\n   Differ uses SequenceMatcher both to compare sequences.\n\n   **compare(seq1, seq2)**\n\n      Compare two sequences; return a generator of differences.\n\n      Requirement is\n\n      * both sequences must be iterable (no generator).\n\n      * items in a sequence must be (recursively) hashable.\n\n      If the items of a sequences are iterable, detect similar ones as needed.\n\n      * Examples of hashable and iterable object (containing only hashable objects)\n           * string\n\n           * bytes\n\n           * tuple\n\n           * namedtuple (e.g., using pandas.DataFrame.itertuples())\n\n           * \u2026\n\n      Example:\n\n      >>> import pprint\n      >>>\n      >>> pprint.pprint(list(Differ().compare([\n      ...    1, 2, 3, (4, 5), 6, 7, 8\n      ... ], [\n      ...    1, 2, 33, 4, 5, 6, 7, 8\n      ... ])))\n      [True,\n       ((' ', 0, 1, 0, 1), None),\n       ((' ', 1, 2, 1, 2), None),\n       False,\n       True,\n       (('|', 2, 3, 2, 33), None),\n       (('|', 3, (4, 5), 3, 4), None),\n       (('>', None, None, 4, 5), None),\n       False,\n       True,\n       ((' ', 4, 6, 5, 6), None),\n       ((' ', 5, 7, 6, 7), None),\n       ((' ', 6, 8, 7, 8), None),\n       False]\n      >>>\n      >>> text1 = '''one\n      ... two\n      ... three\n      ... '''.splitlines(1)\n      >>>\n      >>> text2 = '''ore\n      ... tree\n      ... emu\n      ... '''.splitlines(1)\n      >>>\n      >>> pprint.pprint(list(Differ().compare(text1, text2)), width=100)\n      [True,\n       (('>', None, None, 0, 'ore\\n'), None),\n       (('<', 0, 'one\\n', None, None), None),\n       (('<', 1, 'two\\n', None, None), None),\n       (('|', 2, 'three\\n', 1, 'tree\\n'), [(' ', 't', 't'), ('-', 'h', None), (' ', 'ree\\n', 'ree\\n')]),\n       (('>', None, None, 2, 'emu\\n'), None),\n       False]\n      >>>\n      >>> # like sdiff\n      >>> pprint.pprint(list(Differ(cutoff=0, fuzzy=1).compare(text1, text2)), width=100)\n      [True,\n       (('|', 0, 'one\\n', 0, 'ore\\n'), [(' ', 'o', 'o'), ('!', 'n', 'r'), (' ', 'e\\n', 'e\\n')]),\n       (('|', 1, 'two\\n', 1, 'tree\\n'), [(' ', 't', 't'), ('!', 'wo', 'ree'), (' ', '\\n', '\\n')]),\n       (('|', 2, 'three\\n', 2, 'emu\\n'),\n        [('-', 'thr', None), (' ', 'e', 'e'), ('!', 'e', 'mu'), (' ', '\\n', '\\n')]),\n       False]\n      >>>\n      >>> text1 = '''  1. Beautiful is better than ugly.\n      ...   2. Explicit is better than implicit.\n      ...   3. Simple is better than complex.\n      ...   4. Complex is better than complicated.\n      ... '''.splitlines(1)\n      >>>\n      >>> text2 = '''  1. Beautiful is better than ugly.\n      ...   3.   Simple is better than complex.\n      ...   4. Complicated is better than complex.\n      ...   5. Flat is better than nested.\n      ... '''.splitlines(1)\n      >>>\n      >>> diff = Differ().compare(text1, text2)\n      >>> pprint.pprint(list(diff), width=120)\n      [True,\n       ((' ', 0, '  1. Beautiful is better than ugly.\\n', 0, '  1. Beautiful is better than ugly.\\n'), None),\n       False,\n       True,\n       (('<', 1, '  2. Explicit is better than implicit.\\n', None, None), None),\n       (('|', 2, '  3. Simple is better than complex.\\n', 1, '  3.   Simple is better than complex.\\n'),\n        [(' ', '  3.', '  3.'),\n         ('+', None, '  '),\n         (' ', ' Simple is better than complex.\\n', ' Simple is better than complex.\\n')]),\n       (('|', 3, '  4. Complex is better than complicated.\\n', 2, '  4. Complicated is better than complex.\\n'),\n        [(' ', '  4. Compl', '  4. Compl'),\n         ('+', None, 'icat'),\n         (' ', 'e', 'e'),\n         ('!', 'x', 'd'),\n         (' ', ' is better than compl', ' is better than compl'),\n         ('-', 'icat', None),\n         (' ', 'e', 'e'),\n         ('!', 'd', 'x'),\n         (' ', '.\\n', '.\\n')]),\n       (('>', None, None, 3, '  5. Flat is better than nested.\\n'), None),\n       False]\n\n      +--------------+----------------------------------------------------------------------------------------------+\n      | Yields       | Meaning                                                                                      |\n      +==============+==============================================================================================+\n      | True         | begin of a group of diff                                                                     |\n      +--------------+----------------------------------------------------------------------------------------------+\n      | False        | end of a group of diff                                                                       |\n      +--------------+----------------------------------------------------------------------------------------------+\n      | None         | omitted matches beyond the number of contexts                                                |\n      +--------------+----------------------------------------------------------------------------------------------+\n      | Tuple        | ((Code, Index1 | None, Item1 | None, Index2 | None, Item2 | None), InlineDiff | None)        |\n      +--------------+----------------------------------------------------------------------------------------------+\n\n      +--------------+--------------------------------------+\n      | Code         | Meaning                              |\n      +==============+======================================+\n      | \u201c<\u201d          | unique to sequence 1                 |\n      +--------------+--------------------------------------+\n      | \u201c>\u201d          | unique to sequence 2                 |\n      +--------------+--------------------------------------+\n      | \u201c \u201c          | common to both sequences             |\n      +--------------+--------------------------------------+\n      | \u201c|\u201d          | different to both sequences          |\n      +--------------+--------------------------------------+\n\n      +--------------+----------------------------------------------------------------------+\n      | InlineDiff   | Meaning                                                              |\n      +==============+======================================================================+\n      | None         | There is no InlineDiff (Code is not \u201c|\u201d or items are not iterable)   |\n      +--------------+----------------------------------------------------------------------+\n      | List         | [(InlineCode, SlicedItem1 | None, SlicedItem2 | None), \u2026 ]           |\n      +--------------+----------------------------------------------------------------------+\n\n      +--------------+----------------------------------------------------------+\n      | InlineCode   | Meaning                                                  |\n      +==============+==========================================================+\n      | \u201c-\u201d          | unique to inline sequence 1 (item of sequence 1)         |\n      +--------------+----------------------------------------------------------+\n      | \u201c+\u201d          | unique to inline sequence 2 (item of sequence 2)         |\n      +--------------+----------------------------------------------------------+\n      | \u201c \u201c          | common to both inline sequences (item of sequences)      |\n      +--------------+----------------------------------------------------------+\n      | \u201c!\u201d          | different to both inline sequences (item of sequences)   |\n      +--------------+----------------------------------------------------------+\n\n**class uxdiff.LikeUnifiedDiffer(*args, **kwargs)**\n\n   **pretty_compare(lines1, lines2, width=130, withcolor=False, withbg=False, offset1=0, offset2=0)**\n\n      Compare two sequences of string; return a generator of pretty difference representations.\n\n**class uxdiff.SideBySideDiffer(*args, **kwargs)**\n\n   **pretty_compare(lines1, lines2, width=130, withcolor=False, withbg=False, offset1=0, offset2=0)**\n\n      Compare two sequences of string; return a generator of pretty difference representations.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "As a command, Compare two text files or directories. As a module, Compare two sequences of hashable objects.",
    "version": "1.5.2",
    "project_urls": {
        "Homepage": "https://github.com/tanaga9/uxdiff"
    },
    "split_keywords": [
        "colored",
        "side-by-side",
        "diff"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1307a9e0407b87ed106331162c1f8dc2380e635676723488ac61f067ae952dfe",
                "md5": "05f258a319547afc82fc3beeabc62224",
                "sha256": "6088b138e425d70fd102ca38858df8a859455e80c3dbeb540b207d61d22e6c3b"
            },
            "downloads": -1,
            "filename": "uxdiff-1.5.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "05f258a319547afc82fc3beeabc62224",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 28413,
            "upload_time": "2023-11-05T17:46:27",
            "upload_time_iso_8601": "2023-11-05T17:46:27.968956Z",
            "url": "https://files.pythonhosted.org/packages/13/07/a9e0407b87ed106331162c1f8dc2380e635676723488ac61f067ae952dfe/uxdiff-1.5.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e28fdbebaa0dfce03cf4b9000876aecd62135df58004d19ba4da2f19f743d162",
                "md5": "793d655f7ad7fc64b4a995b30a9d13d4",
                "sha256": "e6e9a2b8c51a207ac88e08c55af256cae7027c1d6c46af25d045ea9c0af63b38"
            },
            "downloads": -1,
            "filename": "uxdiff-1.5.2.tar.gz",
            "has_sig": false,
            "md5_digest": "793d655f7ad7fc64b4a995b30a9d13d4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 27878,
            "upload_time": "2023-11-05T17:46:29",
            "upload_time_iso_8601": "2023-11-05T17:46:29.663180Z",
            "url": "https://files.pythonhosted.org/packages/e2/8f/dbebaa0dfce03cf4b9000876aecd62135df58004d19ba4da2f19f743d162/uxdiff-1.5.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-11-05 17:46:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "tanaga9",
    "github_project": "uxdiff",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "uxdiff"
}
        
Elapsed time: 0.13565s