alignment

This module provides functions to align texts. The procedures consider multibyte strings (ex: あいうえお, 漢字).

Basic usage

Show example that aligns text that has half width string and full width string.

Example:

import alignment

let s = @["abcde", "あいうえお", "ABC", "あ", "123456789"]
let aligned = s.alignCenter
doAssert aligned[0] == "  abcde   "
doAssert aligned[1] == "あいうえお"
doAssert aligned[2] == "   ABC    "
doAssert aligned[3] == "    あ    "
doAssert aligned[4] == "123456789 "

for line in aligned:
  echo "| ", line, " |"

## Output:
## |   abcde    |
## | あいうえお |
## |    ABC     |
## |     あ     |
## | 123456789  |

Procs

proc alignLeft(lines: openArray[string]; pad = " "; halfPad = " "; width = -1;
               additionalPadWidth = 0): seq[string] {...}{.raises: [], tags: [].}
Aligns strings with padding, so that it is of max look length of strings. Padding string are added before resulting in left alignment.

Example:

let aligned = @["abcde", "あいうえお"].alignLeft
doAssert aligned[0] == "abcde     "
doAssert aligned[1] == "あいうえお"

let aligned2 = @["abcde", "あいうえお"].alignLeft(pad = "ん", halfPad = "X")
doAssert aligned2[0] == "abcdeXんん"
doAssert aligned2[1] == "あいうえお"

let aligned3 = @["abcde", "あいうえお"].alignLeft(width = 14)
doAssert aligned3[0] == "abcde         "
doAssert aligned3[1] == "あいうえお    "

let aligned4 = @["abcde", "あいうえお"].alignLeft(
    additionalPadWidth = 10)
doAssert aligned4[0] == "abcde               "
doAssert aligned4[1] == "あいうえお          "
proc alignCenter(lines: openArray[string]; pad = " "; halfPad = " ";
                 width = -1; additionalPadWidth = 0): seq[string] {...}{.raises: [],
    tags: [].}
Aligns strings with padding, so that it is of max look length of strings. Padding string are added before and after resulting in center alignment.

Example:

let aligned = @["abcde", "あいうえお"].alignCenter
doAssert aligned[0] == "  abcde   "
doAssert aligned[1] == "あいうえお"

let aligned2 = @["abcde", "あいうえお"].alignCenter(pad = "ん", halfPad = "X")
doAssert aligned2[0] == "んabcdeXん"
doAssert aligned2[1] == "あいうえお"

let aligned3 = @["abcde", "あいうえお"].alignCenter(width = 14)
doAssert aligned3[0] == "    abcde     "
doAssert aligned3[1] == "  あいうえお  "

let aligned4 = @["abcde", "あいうえお"].alignCenter(
    additionalPadWidth = 10)
doAssert aligned4[0] == "       abcde        "
doAssert aligned4[1] == "     あいうえお     "
proc alignRight(lines: openArray[string]; pad = " "; halfPad = " "; width = -1;
                additionalPadWidth = 0): seq[string] {...}{.raises: [], tags: [].}
Aligns strings with padding, so that it is of max look length of strings. Padding string are added after resulting in right alignment.

Example:

let aligned = @["abcde", "あいうえお"].alignRight
doAssert aligned[0] == "     abcde"
doAssert aligned[1] == "あいうえお"

let aligned2 = @["abcde", "あいうえお"].alignRight(pad = "ん", halfPad = "X")
doAssert aligned2[0] == "んんXabcde"
doAssert aligned2[1] == "あいうえお"

let aligned3 = @["abcde", "あいうえお"].alignRight(width = 14)
doAssert aligned3[0] == "         abcde"
doAssert aligned3[1] == "    あいうえお"

let aligned4 = @["abcde", "あいうえお"].alignRight(
    additionalPadWidth = 10)
doAssert aligned4[0] == "               abcde"
doAssert aligned4[1] == "          あいうえお"