úÎOCK#      !"(c) Brent Yorgey 2009BSD-style (see LICENSE)David.Feuer@gmail.com experimentalportable Safe-Inferred6#Contents of a box.$%A sub-box with a specified alignment.%A column of sub-boxes.&A row of sub-boxes.' A raw string.( No content.0Data type for specifying the alignment of boxes.)Align at the bottom/right.*%Centered, biased to the bottom/right.+!Centered, biased to the top/left.,Align at the top/left.NThe basic data type. A box has a specified size and some sort of contents.Align boxes along their tops. Align boxes along their bottoms.Align boxes to the left.Align boxes to the right.PAlign boxes centered, but biased to the left/top in case of unequal parities. TAlign boxes centered, but biased to the right/bottom in case of unequal parities. HThe null box, which has no content and no size. It is quite useless.  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. A 1x1# box containing a single character. A (1 x len$) box containing a string of length len.JPaste two boxes together horizontally, using a default (top) alignment.tPaste two boxes together horizontally with a single intervening column of space, using a default (top) alignment.IPaste two boxes together vertically, using a default (left) alignment.pPaste two boxes together vertically with a single intervening row of space, using a default (left) alignment.EGlue a list of boxes together horizontally, with the given alignment. hsep sep a bs lays out bs horizontally with alignment a , with sep! amount of space in between each.CGlue a list of boxes together vertically, with the given alignment. vsep sep a bs lays out bs vertically with alignment a , with sep! amount of space in between each.punctuateH a p bs! horizontally lays out the boxes bs with a copy of p interspersed between each.A vertical version of . para algn w t is a box of width w, containing text t, aligned according to algn*, flowed to fit within the given width. 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.-mkParaBox a n s makes a box of height n with the text s aligned according to a..)Flow the given text into the given width.alignHoriz algn n bx creates a box of width n%, with the contents and height of bx', horizontally aligned according to algn.alignVert algn n bx creates a box of height n$, with the contents and width of bx%, vertically aligned according to algn.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.nMove a box "up" by putting it in a larger box with extra rows, aligned to the top. See the disclaimer for .qMove a box down by putting it in a larger box with extra rows, aligned to the bottom. See the disclaimer for .ÿ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. mMove a box right by putting it in a larger box with extra columns, aligned right. See the disclaimer for .! Render a > as a String, suitable for writing to the screen or a file./"Padded take":  takeP a n xs is the same as  take n xs, if n <= length xs; otherwise it is xs! followed by enough copies of a to make the length equal to n.0takePA  is like /8, but with alignment. That is, we imagine a copy of xs5 extended infinitely on both sides with copies of a, and a window of size n placed so that xs3 has the specified alignment within the window; takePA algn a n xs( returns the contents of this window.1Generate a string of spaces.2 Render a box as a list of lines.3>Render a box as a list of lines, using a given number of rows.4ARender a box as a list of lines, using a given number of columns.5 Resize a rendered list of lines.68Resize a rendered list of lines, using given alignments."5A convenience function for rendering a box to stdout.78Convenient ability to use bare string literals as boxes.R89:;<=>?@ABCDEFG#$%&'()*+,HI -.JKLMNOPQ !/0123456"7#  !"%   !"989:;<=>?@ABCDEFG#('&%$,+*)HI -.JKLMNOPQ !/0123456"7R      !"#$%&'()*+,-./0123456789::;<==>?@ABCDDEFGHIJKLMNOP boxes-0.1.4Text.PrettyPrint.Boxes AlignmentBoxrowscolstopbottomleftrightcenter1center2nullBoxemptyBoxchartext<><+>///+/hcathsepvcatvsep punctuateH punctuateVparacolumns alignHoriz alignVertalignmoveUpmoveDownmoveLeft moveRightrenderprintBoxContentSubBoxColRowTextBlank AlignLast AlignCenter2 AlignCenter1 AlignFirst mkParaBoxflowtakePtakePAblanks renderBoxrenderBoxWithRowsrenderBoxWithCols resizeBoxresizeBoxAligned $fIsStringBoxWordwLengetWordLinelLengetWords ParaContentBlock fullLineslastLinePara paraWidth paraContentcontent emptyParagetLinesmkLine startLinemkWordaddWordPaddWordLwordFits