-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | 2D text pretty-printing library
--   
--   A pretty-printing library for laying out text in two dimensions, using
--   a simple box model.
@package boxes
@version 0.1.4

-- | A pretty-printing library for laying out text in two dimensions, using
--   a simple box model.
module Text.PrettyPrint.Boxes

-- | The basic data type. A box has a specified size and some sort of
--   contents.
data Box

-- | The null box, which has no content and no size. It is quite useless.
nullBox :: Box

-- | emptyBox r c is an empty box with r rows and
--   c columns. Useful for effecting more fine-grained positioning
--   of other boxes, by inserting empty boxes of the desired size in
--   between them.
emptyBox :: Int -> Int -> Box

-- | A 1x1 box containing a single character.
char :: Char -> Box

-- | A (1 x len) box containing a string of length len.
text :: String -> Box

-- | para algn w t is a box of width w, containing text
--   t, aligned according to algn, flowed to fit within
--   the given width.
para :: Alignment -> Int -> String -> Box

-- | columns w h t is a list of boxes, each of width w
--   and height at most h, containing text t flowed into
--   as many columns as necessary.
columns :: Alignment -> Int -> Int -> String -> [Box]

-- | Paste two boxes together horizontally, using a default (top)
--   alignment.
(<>) :: Box -> Box -> Box

-- | Paste two boxes together horizontally with a single intervening column
--   of space, using a default (top) alignment.
(<+>) :: Box -> Box -> Box

-- | Glue a list of boxes together horizontally, with the given alignment.
hcat :: Alignment -> [Box] -> Box

-- | hsep sep a bs lays out bs horizontally with
--   alignment a, with sep amount of space in between
--   each.
hsep :: Int -> Alignment -> [Box] -> Box

-- | Paste two boxes together vertically, using a default (left) alignment.
(//) :: Box -> Box -> Box

-- | Paste two boxes together vertically with a single intervening row of
--   space, using a default (left) alignment.
(/+/) :: Box -> Box -> Box

-- | Glue a list of boxes together vertically, with the given alignment.
vcat :: Alignment -> [Box] -> Box

-- | vsep sep a bs lays out bs vertically with alignment
--   a, with sep amount of space in between each.
vsep :: Int -> Alignment -> [Box] -> Box

-- | punctuateH a p bs horizontally lays out the boxes bs
--   with a copy of p interspersed between each.
punctuateH :: Alignment -> Box -> [Box] -> Box

-- | A vertical version of punctuateH.
punctuateV :: Alignment -> Box -> [Box] -> Box

-- | Data type for specifying the alignment of boxes.
data Alignment

-- | Align boxes to the left.
left :: Alignment

-- | Align boxes to the right.
right :: Alignment

-- | Align boxes along their tops.
top :: Alignment

-- | Align boxes along their bottoms.
bottom :: Alignment

-- | Align boxes centered, but biased to the left/top in case of unequal
--   parities.
center1 :: Alignment

-- | Align boxes centered, but biased to the right/bottom in case of
--   unequal parities.
center2 :: Alignment

-- | Move a box left by putting it in a larger box with extra columns,
--   aligned left. Note that the name of this function is something of a
--   white lie, as this will only result in the box being moved left by the
--   specified amount if it is already in a larger right-aligned context.
moveLeft :: Int -> Box -> Box

-- | Move a box right by putting it in a larger box with extra columns,
--   aligned right. See the disclaimer for moveLeft.
moveRight :: Int -> Box -> Box

-- | Move a box "up" by putting it in a larger box with extra rows, aligned
--   to the top. See the disclaimer for moveLeft.
moveUp :: Int -> Box -> Box

-- | Move a box down by putting it in a larger box with extra rows, aligned
--   to the bottom. See the disclaimer for moveLeft.
moveDown :: Int -> Box -> Box

-- | alignHoriz algn n bx creates a box of width n, with
--   the contents and height of bx, horizontally aligned according
--   to algn.
alignHoriz :: Alignment -> Int -> Box -> Box

-- | alignVert algn n bx creates a box of height n, with
--   the contents and width of bx, vertically aligned according to
--   algn.
alignVert :: Alignment -> Int -> Box -> Box

-- | align ah av r c bx creates an r x c box
--   with the contents of bx, aligned horizontally according to
--   ah and vertically according to av.
align :: Alignment -> Alignment -> Int -> Int -> Box -> Box
rows :: Box -> Int
cols :: Box -> Int

-- | Render a Box as a String, suitable for writing to the screen or
--   a file.
render :: Box -> String

-- | A convenience function for rendering a box to stdout.
printBox :: Box -> IO ()
instance GHC.Show.Show Text.PrettyPrint.Boxes.Box
instance GHC.Show.Show Text.PrettyPrint.Boxes.Content
instance GHC.Show.Show Text.PrettyPrint.Boxes.Alignment
instance GHC.Read.Read Text.PrettyPrint.Boxes.Alignment
instance GHC.Classes.Eq Text.PrettyPrint.Boxes.Alignment
instance Data.String.IsString Text.PrettyPrint.Boxes.Box
