h*)v%H      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw0.5 Safe-Inferred"71xyz{|}~ Safe-Inferred79:;< doclayout+A sequence of strings with font attributes. doclayoutFont attributes. Safe-Inferred" doclayoutClass abstracting over various string types that can fold over characters. Minimal definition is  and >, but defining the other methods can give better performance.'Copyright (C) 2010-2019 John MacFarlaneBSD 3"John MacFarlane alphaportable Safe-Inferred "79:;<$v doclayout(The unicode width of a given character. doclayoutKeeps track of state in length calculations, determining whether we're at the first character, the width so far, possibly a tentative width for this group, and the Map for possible emoji continuations. doclayoutIn reverse order doclayout means no wrapping doclayoutNumber of preceding newlines doclayoutCurrent link target  doclayout2Document, including structure relevant for layout.  doclayoutText with specified width.  doclayoutA block with a width and lines.  doclayoutA vertically expandable block; when concatenated with a block, expands to height of block, with each line containing the specified text.  doclayout'Text which doesn't need further cooking doclayoutDoc with each line prefixed with text. Note that trailing blanks are omitted from the prefix when the line after it is empty. doclayout&Doc that renders only before nonblank. doclayout"Doc laid out flush to left margin. doclayout"A space or line break, in context. doclayout#Text printed only at start of line. doclayout&Newline unless we're at start of line. doclayoutnewline. doclayoutEnsure a number of blank lines. doclayoutTwo documents concatenated. doclayout A hyperlink doclayout Unfold a   into a flat list. doclayoutTrue if the document is empty. doclayoutThe empty document. doclayout#Concatenate documents horizontally. doclayoutConcatenate a list of  *s, putting breakable spaces between them. doclayoutSame as ,, but putting breakable spaces between the  s.  doclayouta $$ b puts a above b.! doclayouta $+$ b puts a above b, with a blank line between." doclayoutList version of  .# doclayoutList version of !.$ doclayout#Removes leading blank lines from a  .% doclayout%Chomps trailing blank space off of a  .& doclayout Synonym for (.' doclayout Render a   with ANSI escapes. renderANSI (Just n) will use a line length of n& to reflow text on breakable spaces. renderANSI Nothing will not reflow text.( doclayout Render a   without using ANSI escapes. renderPlain (Just n) will use a line length of n& to reflow text on breakable spaces. renderPlain Nothing will not reflow text.) doclayout Create a   from a stringlike value.* doclayoutA literal string. (Like ), but restricted to String.)+ doclayout A character., doclayoutA breaking (reflowable) space.- doclayoutA carriage return. Does nothing if we're at the beginning of a line; otherwise inserts a newline.. doclayout2Inserts a blank line unless one exists already. (blankline <> blankline has the same effect as  blankline./ doclayout1Inserts blank lines unless they exist already. (blanklines m <> blanklines n has the same effect as blanklines (max m n).0 doclayoutUses the specified string as a prefix for every line of the inside document (except the first, if not at the beginning of the line).1 doclayoutMakes a   flush against the left margin.2 doclayout Indents a  # by the specified number of spaces.3 doclayoutA hanging indent. hang ind start doc prints start, then doc, leaving an indent of ind% spaces on every line but the first.4 doclayoutbeforeNonBlank d conditionally includes d' unless it is followed by blank space.5 doclayoutMakes a   non-reflowable.6 doclayoutContent to print only if it comes at the beginning of a line, to be used e.g. for escaping line-initial  in roff man.7 doclayoutReturns the width of a  .8 doclayoutReturns the minimal width of a  # when reflowed at breakable spaces.9 doclayoutReturns the column that would be occupied by the last laid out character (assuming no wrapping).: doclayout lblock n d is a block of width n% characters, with text derived from d and aligned to the left.; doclayoutLike : but aligned to the right.< doclayoutLike : but aligned centered.= doclayout'Returns the height of a block or other  .> doclayoutAn expandable border that, when placed next to a box, expands to the height of the box. Strings cycle through the list provided.? doclayout Encloses a   inside a start and end  .@ doclayoutPuts a   in curly braces.A doclayoutPuts a   in square brackets.B doclayoutPuts a   in parentheses.C doclayoutWraps a   in single quotes.D doclayoutWraps a   in double quotes.E doclayoutPuts a   in boldface.F doclayoutPuts a   in italics.G doclayout Underlines a  .H doclayoutPuts a line through a  .I doclayoutSet foreground color.J doclayoutSet background color.S doclayoutMake Doc a hyperlink.T doclayoutReturns width of a character in a monospace font: 0 for a combining character, 1 for a regular character, 2 for an East Asian wide character. Ambiguous characters are treated as width 1.U doclayoutGet real length of string, taking into account combining and double-wide characters. Ambiguous characters are treated as width 1.V doclayoutGet the real length of a string, taking into account combining and double-wide characters. Ambiguous characters are treated as width 1.W doclayoutGet the real length of a string, taking into account combining and double-wide characters. Ambiguous characters are treated as width 2.X doclayoutLike V, but avoids optimizations (shortcuts). This is exposed for testing, to ensure that the optimizations are safe.Y doclayoutLike W, but avoids optimizations (shortcuts). This is exposed for testing, to ensure that the optimizations are safe. doclayoutGet real length of string, taking into account combining and double-wide characters, using the given accumulator. This is exposed for testing. doclayout Update a  by processing a character. For efficiency, we isolate commonly used portions of the basic multilingual plane that do not have emoji in them. This works in a narrow context. doclayout Update a  by processing a character. For efficiency, we isolate commonly used portions of the basic multilingual plane that do not have emoji in them. This works in a wide context. doclayout Update a  by processing a character, without taking any shortcuts. This should give the same answer as , but will be slower. It is here to test that the shortcuts are implemented correctly. doclayout Update a  by processing a character, without taking any shortcuts. This should give the same answer as , but will be slower. It is here to test that the shortcuts are implemented correctly. doclayout4Update a match state given a character and its class doclayoutGet the final width from a .Z doclayout3Checks whether a character is a skin tone modifier.[ doclayout:Checks whether a character is an emoji variation modifier.\ doclayout2Checks whether a character is a zero-width joiner. doclayout/Check a character to see how it modifies emoji. doclayoutA map of all emoji start characters and the modifiers they take. doclayoutDenotes the contiguous ranges of Unicode characters which have a given width: 1 for a regular character, 2 for an East Asian wide character. Ambiguous characters are resolved in the specified way. doclayout3Add zero-width joiner and emoji modifiers to a Map. doclayoutCollapse unicode character ranges if the general category doesn't make a difference for width. doclayout%Find the width of a unicode character doclayout.Convert a Map to a UnicodeMap for faster code. doclayout7A list of Unicode ranges and the width assigned to them&('-./,)*+0123456:<;>$%?@ABCDEFGHIJLMNOKPQRS !"#789=TUVWXYZ[\  &('-./,)*+0123456:<;>$%?@ABCDEFGHIJLMNOKPQRS !"#789=TUVWXYZ[\  6 5!5      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~$doclayout-0.5-2Ff4NMLZnwb1qZCpJAjzd5Text.DocLayout doclayoutText.DocLayout.ANSIFontText.DocLayout.AttributedText.DocLayout.HasChars AttributedHasChars foldrChar foldlChar replicateCharisNull splitLinesbuildColorDocTextBlockVFill CookedTextPrefixedBeforeNonBlankFlush BreakingSpace AfterBreakCarriageReturnNewLine BlankLinesConcatStyledLinkedEmptyunfoldDisEmptyemptyhcat<+>hsep$$$+$vcatvsepnestlechomprender renderANSI renderPlainliteraltextcharspacecr blankline blanklinesprefixedflushnesthangbeforeNonBlanknowrap afterBreakoffset minOffset updateColumnlblockrblockcblockheightvfillinsidebracesbracketsparensquotes doubleQuotesbolditalic underlined strikeoutfgbgblueblackredgreenyellowmagentacyanwhitelink charWidth realLengthrealLengthNarrowContextrealLengthWideContext!realLengthNarrowContextNoShortcutrealLengthWideContextNoShortcutisSkinToneModifierisEmojiVariationisZWJ $fIsStringDoc $fMonoidDoc$fSemigroupDoc$fSemigroupEmojiInfo $fEqEmojiInfo$fShowEmojiInfo$fShowUnicodeWidth$fEqUnicodeWidth$fShowMatchState $fShowFlatDoc $fReadFlatDoc $fEqFlatDoc $fOrdFlatDoc$fFunctorFlatDoc$fFoldableFlatDoc$fTraversableFlatDoc $fDataFlatDoc$fGenericFlatDoc $fShowDoc $fReadDoc$fEqDoc$fOrdDoc $fFunctorDoc $fFoldableDoc$fTraversableDoc $fDataDoc $fGenericDocFontftWeightftShape ftUnderline ftStrikeout ftForeground ftBackgroundftLinkbaseFontStyleReqRWeightRShape RForeground RBackground RUnderline RStrikeoutWeightNormalBoldShapeRomanItalicColor8BlackRedGreenYellowBlueMagentaCyanWhite UnderlineULNoneULSingleULDoubleULCurly StrikeoutUnstruckStruck Foreground FGDefaultFG Background BGDefaultBG~> renderFont renderOSC8AttrLinkfromList singleton UnicodeWidth MatchStateoutput lineLengthbase GHC.MaybeNothingnewlines linkTargetGHC.Base.realLengthWithupdateMatchStateNarrowupdateMatchStateWideupdateMatchStateNoShortcutupdateMatchStateNoShortcutWide resolveWidth extractLengthvariationStateemojiMapunicodeRangeMapaddEmojiClasses mergeRanges unicodeWidthrepack unicodeSpec