Swiftpack.co - Package - JanGorman/Table

Swift Tables

Build Status SPM

Working on CLI tools in Swift? Need to display tables? Continue reading.

Add the dependency to your Package.swift file:

import PackageDescription

let package = Package(
    name: "My awesome CLI tool"
    dependencies: [
        .package(
            url: "https://github.com/JanGorman/Table",
            from: "1.0.0"
        )
    ]
)

Basic Usage

import Table

func doSomething() throws {
    let data = [
      ["0A", "0B", "0C"],
      ["1A", "1B", "1C"],
      ["2A", "2B", "2C"],
    ]

    let table = try Table(data: data).table()

    print(table)
}

Results in a pretty table:

╔════╤════╤════╗
║ 0A │ 0B │ 0C ║
╟────┼────┼────╢
║ 1A │ 1B │ 1C ║
╟────┼────┼────╢
║ 2A │ 2B │ 2C ║
╚════╧════╧════╝

Alignment

You can align your table rows by passing in a Configuration:

import Table

func doSomething() throws {
    let data = [
      ["0A", "0B", "0C"],
    ]
    // Give alignment and a minimum width
    let columns = [
      Column(alignment: .left, width: 10),
      Column(alignment: .center, width: 10),
      Column(alignment: .right, width: 10)
    ]
    let configuration = Configuration(columns: columns)
    let table = try Table(data: data).table()

    print(table)
}

Results in:

╔══════════╤══════════╤══════════╗
║0A        │    0B    │        0C║
╚══════════╧══════════╧══════════╝

Padding

The Configuration also allows for padding:

import Table

func doSomething() throws {
    let data = [
      ["0A", "0B", "0C"],
    ]
    let columns = [
      Column(paddingLeft: 3, paddingRight: 4),
      Column(paddingLeft: 8, paddingRight: 8),
      Column(paddingLeft: 3, paddingRight: 4)
    ]
    let configuration = Configuration(columns: columns)
    let table = try Table(data: data).table()

    print(table)
}

Would give you:

╔═════════╤══════════════════╤═════════╗
║   0A    │        0B        │   0C    ║
╚═════════╧══════════════════╧═════════╝

Custom Border Style

To use a custom border for your tables simply create a struct conforming to the Border protocol and pass it as part of a custom Configuration. For example:

import Table

struct CustomBorder: Border {
  public let topBody = "─"
  public let topJoin = "┬"
  public let topLeft = "┌"
  public let topRight = "┐"

  public let bottomBody = "─"
  public let bottomJoin = "┴"
  public let bottomLeft = "└"
  public let bottomRight = "┘"

  public let bodyLeft = "│"
  public let bodyRight = "│"
  public let bodyJoin = "│"

  public let joinBody = "─"
  public let joinLeft = "├"
  public let joinRight = "┤"
  public let joinJoin = "┼"
}

func doSomething() throws -> String {
  …
  let configuration = Configuration(border: CustomBorder(), columns: columns)
  return try Table(data: data).table()
}

Licence

Table is released under the MIT license. See LICENSE for details.

Github

link
Stars: 13
Help us keep the lights on

Dependencies

Used By

Total: 1

Releases

1.0.1 - Nov 30, 2017

  • Adds a product definition to the the Package.swift

1.0.0 - Nov 30, 2017