úÎOüKÊ#      !"portable experimentalbyorgey@cis.upenn.edu 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. 1Data 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. BThe 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. ,Align boxes centered, but biased to the left/top in case of  unequal parities. -Align boxes centered, but biased to the right/bottom in case of  unequal parities. =The 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 B 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. =Paste two boxes together horizontally, using a default (top)  alignment. @Paste two boxes together horizontally with a single intervening 5 column of space, using a default (top) alignment. <Paste two boxes together vertically, using a default (left)  alignment. BPaste two boxes together vertically with a single intervening row / of space, using a default (left) alignment. FGlue 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. DGlue 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.  Move a box "up"0 by putting it in a larger box with extra rows, / aligned to the top. See the disclaimer for . ?Move a box down by putting it in a larger box with extra rows, 2 aligned to the bottom. See the disclaimer for . BMove a box left by putting it in a larger box with extra columns, 9 aligned left. Note that the name of this function is A something of a white lie, as this will only result in the box B being moved left by the specified amount if it is already in a ! larger right-aligned context. :Move a box right by putting it in a larger box with extra 3 columns, aligned right. See the disclaimer for . ! Render a 4 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 /#, but with alignment. That is, we  imagine a copy of xs( extended infinitely on both sides with  copies of a, and a window of size n placed so that xs 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. 4BRender a box as a list of lines, using a given number of columns. 5!Resize a rendered list of lines. 69Resize a rendered list of lines, using given alignments. "6A convenience function for rendering a box to stdout. 79Convenient 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.3Text.PrettyPrint.Boxes AlignmentBoxrowscolstopbottomleftrightcenter1center2nullBoxemptyBoxchartext<><+>///+/hcathsepvcatvsep punctuateH punctuateVparacolumns alignHoriz alignVertalignmoveUpmoveDownmoveLeft moveRightrenderprintBoxContentSubBoxColRowTextBlank AlignLast AlignCenter2 AlignCenter1 AlignFirst mkParaBoxflowtakePtakePAblanks renderBoxrenderBoxWithRowsrenderBoxWithCols resizeBoxresizeBoxAligned $fIsStringBoxWordwLengetWordLinelLengetWords ParaContentBlock fullLineslastLinePara paraWidth paraContentcontent emptyParagetLinesmkLine startLinemkWordaddWordPaddWordLwordFits