tabulicious


Nametabulicious JSON
Version 0.5.0 PyPI version JSON
download
home_pageNone
SummarySimple text-based table formatting for command line and documentation use.
upload_time2025-08-05 06:20:34
maintainerNone
docs_urlNone
authorDaniel Sissman
requires_python>=3.10
licenseNone
keywords table tables data tables command line tables text tables markdown tables html tables atlassian/jira tables github tables
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Tabulicious

The Tabulicious library provides functionality to generate simple text-based formatted
tables for command line and documentation use in a range of formats including plaintext,
Markdown and HTML.

### Requirements

The Tabulicious library has been tested to work with Python 3.10, 3.11, 3.12 and 3.13,
but has not been tested, nor is its use supported with earlier versions of Python.

### Installation

The library is available from the PyPI repository, so may be added easily to a project's
dependencies via its `requirements.txt` file or similar by referencing the library's
name, `tabulicious`, or the library may be installed directly onto your local development
system using `pip install` by entering the following command:

	$ pip install tabulicious

### Introduction

The Tabulicious library can be used to easily create text-based tables in a range of
formats from a list of row data, where each row has the same number of columns, and each
column contains a printable value or a `None` value. Printable values include all values
that have a string representation, which include all of the built-in and custom types
that support the `__str__` method.

Instances of the library can be created by creating an instance of the `Tabulicious`
class, or by using the `tabulate` helper function, both of which can be imported from
the top-level `tabulicious` module.

### Examples of Use

```python
from tabulicious import Tabulicious

# All rows must have the same number of columns, even if a column in a given row is
# empty, a value must still be supplied for that column, as an empty string or `None`:
rows = [
    ["Column 1A", "Column 1B", "Column 1C"],
    ["Column 2A", None, "Column 2C"],
]

# Table headers are optional, but if supplied, must have the same number of columns as
# the row data does:
headers = ["Header 1", "Header 2", "Header 3"]

# Create a new instance of the class with the row data and optional headers
table = Tabulicious(rows=rows, headers=headers)

# The Tabulicious class provides a string representation of itself whenever its __str__ 
# method is called, so can be passed to methods like `print` or concatenated with other
# string output:
print(table)
```

The above code sample generates the following output:

```text
┌───────────┬───────────┬───────────┐
│ Header 1  │ Header 2  │ Header 3  │
├───────────┼───────────┼───────────┤
│ Column 1A │ Column 1B │ Column 1C │
├───────────┼───────────┼───────────┤
│ Column 2A │           │ Column 2C │
└───────────┴───────────┴───────────┘
```

The library also provides a `tabulate` helper method that takes the same arguments as
the `Tabulicious` class:

```python
from tabulicious import tabulate

# All rows must have the same number of columns, even if a column in a given row is
# empty, a value must still be supplied for that column, as an empty string or `None`:
rows = [
    ["Column 1A", "Column 1B", "Column 1C"],
    ["Column 2A", None, "Column 2C"],
]

# Table headers are optional, but if supplied, must have the same number of columns as
# the row data does:
headers = ["Header 1", "Header 2", "Header 3"]

# Create a new instance of the class with the row data and optional headers
table = tabulate(rows=rows, headers=headers)

# The Tabulicious class provides a string representation of itself whenever its __str__ 
# method is called, so can be passed to methods like `print` or concatenated with other
# string output:
print(table)
```

### Formatting

Support for the various output formats are provided through the collection of `Format`
subclasses provided by the library. These subclasses are responsible for formatting the
tabular row and optional header data and formatting it into the chosen text-based format
such as Markdown, HTML or plaintext.

By default the library generates plaintext formatted tables using the `Plaintext` format
subclass. As the `Plaintext` formatter is the default, it does not need to be specified
when creating a plaintext formatted table. To use one of the other formatter subclasses,
import the desired formatter from the library and pass it to the class initialiser using
the `format` keyword argument. The list of currently supported formatters are listed in
the [**Formatters**](#formatters) section below.

For example, to generate Markdown formatted tables, import the `Markdown` subclass from
the library and pass it to the initialiser using the `format` keyword argument as shown
below:

```python
from tabulicious import tabulate, Markdown

# All rows must have the same number of columns, even if a column in a given row is
# empty, a value must still be supplied for that column, as an empty string or `None`:
rows = [
    ["Column 1A", "Column 1B", "Column 1C"],
    ["Column 2A", None, "Column 2C"],
]

# Table headers are optional, but if supplied, must have the same number of columns as
# the row data does:
headers = ["Header 1", "Header 2", "Header 3"]

# Create a new instance of the class with the row data and optional headers; the same
# arguments can be passed to the Tabulicious class directly:
table = tabulate(rows=rows, headers=headers, format=Markdown)

print(table)
```

The above code sample generates the following output:

```text
| Header 1 | Header 2 | Header 3 |
| :-- | :-- | :-- |
| Column 1A | Column 1B | Column 1C |
| Column 2A | Column 2B | Column 2C |
```

Which when rendered as Markdown, will look like the following:

| Header 1 | Header 2 | Header 3 |
| :-- | :-- | :-- |
| Column 1A | Column 1B | Column 1C |
| Column 2A | Column 2B | Column 2C |

To generate HTML formatted tables, import the `HTML` subclass from the library and pass
it to the initialiser using the `format` keyword argument as shown below:

```python
from tabulicious import Tabulicious, HTML

# All rows must have the same number of columns, even if a column in a given row is
# empty, a value must still be supplied for that column, as an empty string or `None`:
rows = [
    ["Column 1A", "Column 1B", "Column 1C"],
    ["Column 2A", None, "Column 2C"],
]

# Table headers are optional, but if supplied, must have the same number of columns as
# the row data does:
headers = ["Header 1", "Header 2", "Header 3"]

# Create a new instance of the class with the row data and optional headers; the same
# arguments can be passed to the tabulate function:
table = Tabulicious(rows=rows, headers=headers, format=HTML)

print(table)
```

The above code sample generates the following output:

```text
<table>
  <thead>
    <tr>
      <td>Header 1</td><td>Header 2</td><td>Header 3</td>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Column 1A</td><td>Column 1B</td><td>Column 1C</td>
    </tr>
    <tr>
      <td>Column 2A</td><td>Column 2B</td><td>Column 2C</td>
    </tr>
  </tbody>
</table>
```

Which when rendered as HTML, will look like the following:

<table>
  <thead>
    <tr>
      <td>Header 1</td><td>Header 2</td><td>Header 3</td>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Column 1A</td><td>Column 1B</td><td>Column 1C</td>
    </tr>
    <tr>
      <td>Column 2A</td><td>Column 2B</td><td>Column 2C</td>
    </tr>
  </tbody>
</table>

<a name='formatters'></a>
### Formatters

The Tabulicious library currently provides the following formatter subclasses which can]
be used to generate text-based tables of the relevant format:

| Formatter   | Format                     | Notes                                    |
| :---------- | :------------------------- | :--------------------------------------- |
| `Plaintext` | Plaintext formatted tables | The `Plaintext` formatter is the default |
| `Markdown`  | Markdown formatted tables  |                                          |
| `HTML`      | HTML formatted tables      |                                          |
| `Atlassian` | Atlassian formatted tables | For Jira tickets, Confluence pages, etc  |

#### Plaintext Formatter

The Plaintext formatter offers the following configuration options:

 * style (control over the border and header styling)
 * minimum column width (number of characters)
 * maximum column width (number of characters)
 * fixed column widths (number of characters)
 * column alignments

The Plaintext formatter offers the following styles:

| Style  | Description                                                              |
| :----- | :----------------------------------------------------------------------- |
| Simple | The `simple` style uses standard ASCII characters to form the table.     |
| Single | The `single` style uses single box drawing characters to form the table. |
| Double | The `double` style uses double box drawing characters to form the table. |
| Curved | The `curved` style uses curved box drawing characters to form the table. |
| Bolded | The `bolded` style uses bolded box drawing characters to form the table. |

#### Plaintext Formatter: Examples

The `simple` style will generate tables similar to the following with ASCII borders:

```text
+-----------+-----------+-----------+
| Header 1  | Header 2  | Header 3  |
+-----------+-----------+-----------+
| Column 1A | Column 1B | Column 1C |
+-----------+-----------+-----------+
| Column 2A | Column 2B | Column 2C |
+-----------+-----------+-----------+
```

The `single` style will generate tables similar to the following with single borders:

```text
┌───────────┬───────────┬───────────┐
│ Header 1  │ Header 2  │ Header 3  │
├───────────┼───────────┼───────────┤
│ Column 1A │ Column 1B │ Column 1C │
├───────────┼───────────┼───────────┤
│ Column 2A │ Column 2B │ Column 2C │
└───────────┴───────────┴───────────┘
```

The `double` style will generate tables similar to the following with double borders:

```text
╔═══════════╦═══════════╦═══════════╗
║ Header 1  ║ Header 2  ║ Header 3  ║
╠═══════════╬═══════════╬═══════════╣
║ Column 1A ║ Column 1B ║ Column 1C ║
╠═══════════╬═══════════╬═══════════╣
║ Column 2A ║ Column 2B ║ Column 2C ║
╚═══════════╩═══════════╩═══════════╝
```

The `bolded` style will generate tables similar to the following with bold borders:

```text
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Header 1  ┃ Header 2  ┃ Header 3  ┃
┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫
┃ Column 1A ┃ Column 1B ┃ Column 1C ┃
┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫
┃ Column 2A ┃ Column 2B ┃ Column 2C ┃
┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┛
```

The `curved` style will generate tables similar to the following with curved borders:

```text
╭───────────┬───────────┬───────────╮
│ Header 1  │ Header 2  │ Header 3  │
├───────────┼───────────┼───────────┤
│ Column 1A │ Column 1B │ Column 1C │
├───────────┼───────────┼───────────┤
│ Column 2A │ Column 2B │ Column 2C │
╰───────────┴───────────┴───────────╯
```

#### Markdown Formatter

The Markdown formatter offers the following configuration options:

 * column alignments

#### HTML Formatter

The HTML formatter offers the following configuration options:

 * column alignments

#### Atlassian Formatter: Examples

The `Atlassian` subclass will generate tables similar to the following:

```text
|| Header 1 || Header 2 || Header 3 ||
| Column 1A | Column 1B | Column 1C |
| Column 2A | Column 2B | Column 2C |
```

### Copyright & License Information

Copyright © 2025 Daniel Sissman; licensed under the MIT License.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "tabulicious",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "table, tables, data tables, command line tables, text tables, markdown tables, html tables, atlassian/jira tables, github tables",
    "author": "Daniel Sissman",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/78/1a/ed66a12d54b8e4a6f2b3f3d3e61dc3c8e39654eed65609dfe8218a47559e/tabulicious-0.5.0.tar.gz",
    "platform": "any",
    "description": "# Tabulicious\n\nThe Tabulicious library provides functionality to generate simple text-based formatted\ntables for command line and documentation use in a range of formats including plaintext,\nMarkdown and HTML.\n\n### Requirements\n\nThe Tabulicious library has been tested to work with Python 3.10, 3.11, 3.12 and 3.13,\nbut has not been tested, nor is its use supported with earlier versions of Python.\n\n### Installation\n\nThe library is available from the PyPI repository, so may be added easily to a project's\ndependencies via its `requirements.txt` file or similar by referencing the library's\nname, `tabulicious`, or the library may be installed directly onto your local development\nsystem using `pip install` by entering the following command:\n\n\t$ pip install tabulicious\n\n### Introduction\n\nThe Tabulicious library can be used to easily create text-based tables in a range of\nformats from a list of row data, where each row has the same number of columns, and each\ncolumn contains a printable value or a `None` value. Printable values include all values\nthat have a string representation, which include all of the built-in and custom types\nthat support the `__str__` method.\n\nInstances of the library can be created by creating an instance of the `Tabulicious`\nclass, or by using the `tabulate` helper function, both of which can be imported from\nthe top-level `tabulicious` module.\n\n### Examples of Use\n\n```python\nfrom tabulicious import Tabulicious\n\n# All rows must have the same number of columns, even if a column in a given row is\n# empty, a value must still be supplied for that column, as an empty string or `None`:\nrows = [\n    [\"Column 1A\", \"Column 1B\", \"Column 1C\"],\n    [\"Column 2A\", None, \"Column 2C\"],\n]\n\n# Table headers are optional, but if supplied, must have the same number of columns as\n# the row data does:\nheaders = [\"Header 1\", \"Header 2\", \"Header 3\"]\n\n# Create a new instance of the class with the row data and optional headers\ntable = Tabulicious(rows=rows, headers=headers)\n\n# The Tabulicious class provides a string representation of itself whenever its __str__ \n# method is called, so can be passed to methods like `print` or concatenated with other\n# string output:\nprint(table)\n```\n\nThe above code sample generates the following output:\n\n```text\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Header 1  \u2502 Header 2  \u2502 Header 3  \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Column 1A \u2502 Column 1B \u2502 Column 1C \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Column 2A \u2502           \u2502 Column 2C \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\nThe library also provides a `tabulate` helper method that takes the same arguments as\nthe `Tabulicious` class:\n\n```python\nfrom tabulicious import tabulate\n\n# All rows must have the same number of columns, even if a column in a given row is\n# empty, a value must still be supplied for that column, as an empty string or `None`:\nrows = [\n    [\"Column 1A\", \"Column 1B\", \"Column 1C\"],\n    [\"Column 2A\", None, \"Column 2C\"],\n]\n\n# Table headers are optional, but if supplied, must have the same number of columns as\n# the row data does:\nheaders = [\"Header 1\", \"Header 2\", \"Header 3\"]\n\n# Create a new instance of the class with the row data and optional headers\ntable = tabulate(rows=rows, headers=headers)\n\n# The Tabulicious class provides a string representation of itself whenever its __str__ \n# method is called, so can be passed to methods like `print` or concatenated with other\n# string output:\nprint(table)\n```\n\n### Formatting\n\nSupport for the various output formats are provided through the collection of `Format`\nsubclasses provided by the library. These subclasses are responsible for formatting the\ntabular row and optional header data and formatting it into the chosen text-based format\nsuch as Markdown, HTML or plaintext.\n\nBy default the library generates plaintext formatted tables using the `Plaintext` format\nsubclass. As the `Plaintext` formatter is the default, it does not need to be specified\nwhen creating a plaintext formatted table. To use one of the other formatter subclasses,\nimport the desired formatter from the library and pass it to the class initialiser using\nthe `format` keyword argument. The list of currently supported formatters are listed in\nthe [**Formatters**](#formatters) section below.\n\nFor example, to generate Markdown formatted tables, import the `Markdown` subclass from\nthe library and pass it to the initialiser using the `format` keyword argument as shown\nbelow:\n\n```python\nfrom tabulicious import tabulate, Markdown\n\n# All rows must have the same number of columns, even if a column in a given row is\n# empty, a value must still be supplied for that column, as an empty string or `None`:\nrows = [\n    [\"Column 1A\", \"Column 1B\", \"Column 1C\"],\n    [\"Column 2A\", None, \"Column 2C\"],\n]\n\n# Table headers are optional, but if supplied, must have the same number of columns as\n# the row data does:\nheaders = [\"Header 1\", \"Header 2\", \"Header 3\"]\n\n# Create a new instance of the class with the row data and optional headers; the same\n# arguments can be passed to the Tabulicious class directly:\ntable = tabulate(rows=rows, headers=headers, format=Markdown)\n\nprint(table)\n```\n\nThe above code sample generates the following output:\n\n```text\n| Header 1 | Header 2 | Header 3 |\n| :-- | :-- | :-- |\n| Column 1A | Column 1B | Column 1C |\n| Column 2A | Column 2B | Column 2C |\n```\n\nWhich when rendered as Markdown, will look like the following:\n\n| Header 1 | Header 2 | Header 3 |\n| :-- | :-- | :-- |\n| Column 1A | Column 1B | Column 1C |\n| Column 2A | Column 2B | Column 2C |\n\nTo generate HTML formatted tables, import the `HTML` subclass from the library and pass\nit to the initialiser using the `format` keyword argument as shown below:\n\n```python\nfrom tabulicious import Tabulicious, HTML\n\n# All rows must have the same number of columns, even if a column in a given row is\n# empty, a value must still be supplied for that column, as an empty string or `None`:\nrows = [\n    [\"Column 1A\", \"Column 1B\", \"Column 1C\"],\n    [\"Column 2A\", None, \"Column 2C\"],\n]\n\n# Table headers are optional, but if supplied, must have the same number of columns as\n# the row data does:\nheaders = [\"Header 1\", \"Header 2\", \"Header 3\"]\n\n# Create a new instance of the class with the row data and optional headers; the same\n# arguments can be passed to the tabulate function:\ntable = Tabulicious(rows=rows, headers=headers, format=HTML)\n\nprint(table)\n```\n\nThe above code sample generates the following output:\n\n```text\n<table>\n  <thead>\n    <tr>\n      <td>Header 1</td><td>Header 2</td><td>Header 3</td>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Column 1A</td><td>Column 1B</td><td>Column 1C</td>\n    </tr>\n    <tr>\n      <td>Column 2A</td><td>Column 2B</td><td>Column 2C</td>\n    </tr>\n  </tbody>\n</table>\n```\n\nWhich when rendered as HTML, will look like the following:\n\n<table>\n  <thead>\n    <tr>\n      <td>Header 1</td><td>Header 2</td><td>Header 3</td>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Column 1A</td><td>Column 1B</td><td>Column 1C</td>\n    </tr>\n    <tr>\n      <td>Column 2A</td><td>Column 2B</td><td>Column 2C</td>\n    </tr>\n  </tbody>\n</table>\n\n<a name='formatters'></a>\n### Formatters\n\nThe Tabulicious library currently provides the following formatter subclasses which can]\nbe used to generate text-based tables of the relevant format:\n\n| Formatter   | Format                     | Notes                                    |\n| :---------- | :------------------------- | :--------------------------------------- |\n| `Plaintext` | Plaintext formatted tables | The `Plaintext` formatter is the default |\n| `Markdown`  | Markdown formatted tables  |                                          |\n| `HTML`      | HTML formatted tables      |                                          |\n| `Atlassian` | Atlassian formatted tables | For Jira tickets, Confluence pages, etc  |\n\n#### Plaintext Formatter\n\nThe Plaintext formatter offers the following configuration options:\n\n * style (control over the border and header styling)\n * minimum column width (number of characters)\n * maximum column width (number of characters)\n * fixed column widths (number of characters)\n * column alignments\n\nThe Plaintext formatter offers the following styles:\n\n| Style  | Description                                                              |\n| :----- | :----------------------------------------------------------------------- |\n| Simple | The `simple` style uses standard ASCII characters to form the table.     |\n| Single | The `single` style uses single box drawing characters to form the table. |\n| Double | The `double` style uses double box drawing characters to form the table. |\n| Curved | The `curved` style uses curved box drawing characters to form the table. |\n| Bolded | The `bolded` style uses bolded box drawing characters to form the table. |\n\n#### Plaintext Formatter: Examples\n\nThe `simple` style will generate tables similar to the following with ASCII borders:\n\n```text\n+-----------+-----------+-----------+\n| Header 1  | Header 2  | Header 3  |\n+-----------+-----------+-----------+\n| Column 1A | Column 1B | Column 1C |\n+-----------+-----------+-----------+\n| Column 2A | Column 2B | Column 2C |\n+-----------+-----------+-----------+\n```\n\nThe `single` style will generate tables similar to the following with single borders:\n\n```text\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Header 1  \u2502 Header 2  \u2502 Header 3  \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Column 1A \u2502 Column 1B \u2502 Column 1C \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Column 2A \u2502 Column 2B \u2502 Column 2C \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\nThe `double` style will generate tables similar to the following with double borders:\n\n```text\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n\u2551 Header 1  \u2551 Header 2  \u2551 Header 3  \u2551\n\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n\u2551 Column 1A \u2551 Column 1B \u2551 Column 1C \u2551\n\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n\u2551 Column 2A \u2551 Column 2B \u2551 Column 2C \u2551\n\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n```\n\nThe `bolded` style will generate tables similar to the following with bold borders:\n\n```text\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 Header 1  \u2503 Header 2  \u2503 Header 3  \u2503\n\u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252b\n\u2503 Column 1A \u2503 Column 1B \u2503 Column 1C \u2503\n\u2523\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u254b\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u252b\n\u2503 Column 2A \u2503 Column 2B \u2503 Column 2C \u2503\n\u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u253b\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u251b\n```\n\nThe `curved` style will generate tables similar to the following with curved borders:\n\n```text\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 Header 1  \u2502 Header 2  \u2502 Header 3  \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Column 1A \u2502 Column 1B \u2502 Column 1C \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Column 2A \u2502 Column 2B \u2502 Column 2C \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n\n#### Markdown Formatter\n\nThe Markdown formatter offers the following configuration options:\n\n * column alignments\n\n#### HTML Formatter\n\nThe HTML formatter offers the following configuration options:\n\n * column alignments\n\n#### Atlassian Formatter: Examples\n\nThe `Atlassian` subclass will generate tables similar to the following:\n\n```text\n|| Header 1 || Header 2 || Header 3 ||\n| Column 1A | Column 1B | Column 1C |\n| Column 2A | Column 2B | Column 2C |\n```\n\n### Copyright & License Information\n\nCopyright \u00a9 2025 Daniel Sissman; licensed under the MIT License.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Simple text-based table formatting for command line and documentation use.",
    "version": "0.5.0",
    "project_urls": {
        "changelog": "https://github.com/bluebinary/tabulicious/blob/main/CHANGELOG.md",
        "documentation": "https://github.com/bluebinary/tabulicious/blob/main/README.md",
        "homepage": "https://github.com/bluebinary/tabulicious",
        "issues": "https://github.com/bluebinary/tabulicious/issues",
        "repository": "https://github.com/bluebinary/tabulicious"
    },
    "split_keywords": [
        "table",
        " tables",
        " data tables",
        " command line tables",
        " text tables",
        " markdown tables",
        " html tables",
        " atlassian/jira tables",
        " github tables"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4bc20b366258829df40db5a15a4ecc399e7be1fb52671897dd4a3799a579a467",
                "md5": "b73f91e02c41cad3815e6320a802c523",
                "sha256": "32fb88a714f41764154cfc1ad33b377b7d24c756b0447d3f7a99ef0a0c6f33fc"
            },
            "downloads": -1,
            "filename": "tabulicious-0.5.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b73f91e02c41cad3815e6320a802c523",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 14002,
            "upload_time": "2025-08-05T06:20:32",
            "upload_time_iso_8601": "2025-08-05T06:20:32.867705Z",
            "url": "https://files.pythonhosted.org/packages/4b/c2/0b366258829df40db5a15a4ecc399e7be1fb52671897dd4a3799a579a467/tabulicious-0.5.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "781aed66a12d54b8e4a6f2b3f3d3e61dc3c8e39654eed65609dfe8218a47559e",
                "md5": "d6647afc246de7a676ff8ab6383c103e",
                "sha256": "2f78513346ef6ece0dd57e53f0be410d08071221b3947cd21682606cb32c893a"
            },
            "downloads": -1,
            "filename": "tabulicious-0.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d6647afc246de7a676ff8ab6383c103e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 13963,
            "upload_time": "2025-08-05T06:20:34",
            "upload_time_iso_8601": "2025-08-05T06:20:34.442798Z",
            "url": "https://files.pythonhosted.org/packages/78/1a/ed66a12d54b8e4a6f2b3f3d3e61dc3c8e39654eed65609dfe8218a47559e/tabulicious-0.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-05 06:20:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bluebinary",
    "github_project": "tabulicious",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "tabulicious"
}
        
Elapsed time: 2.73869s