# boxes - A Pretty Printer for Two Dimensions boxes is a pretty-printing library for laying out text in two dimensions. It is a direct port of the Haskell library [boxes](1) by Brent Yorgey. boxes' core data type is the `Box`, which has a width, a height and some contents. A box's contents can be text or other boxes. There are functions for creating boxes from text and for combining boxes into bigger boxes. ## Creating Boxes The `text` function can be used to create a box from a string, which will have height 1 and length N, where N is the length of the string (Nx1). `char` creates a 1x1 box containing a single character. `emptyBox` creates an empty box of arbitrary width and height. `para :: Alignment -> Int -> String -> Box` creates a box from a string with a specific width. The box will be as high as necessary to fit the text, which is layed out according to the given alignment. ## Combining Boxes The `<>` and `<+>` operators combine boxes horizontally with and without a column of space between both boxes, respectively. The `//` and `/+/` operators are similar, but combine boxes vertically instead of horizontally. `hcat` and `vcat` are versions of `<>` and `//` that combine whole lists of boxes instead of two at a time. `hsep` and `vsep` are versions of `<+>` and `/+/` that operate on lists, with a configurable amount of space between each two boxes. `punctuateH` and `punctuateV` also combine lists of boxes horizontally and vertically, but allow us to specify another box which is copied in between each two boxes. The `align`, `alignVert` and `alignHoriz` functions can be used to create new boxes which contain other boxes in some alignment. `moveUp`, `moveLeft`, `moveDown` and `moveRight` move boxes by some amount inside larger boxes. `table` creates a table from a list of rows and a list of widths for each column. ## Rendering Boxes The `render` function renders a box to a string. The `printBox` function prints a box to stdout. [1]: https://hackage.haskell.org/package/boxes