Lua module wrapping the doclayout Haskell package.
loadProg :: Lua Status loadProg = do openlibs preloadModule "doclayout" dostring $ unlines [ "doc = require 'doclayout'" , "local example_doc = (doc.literal 'Line' + 'One')" , " // (doc.literal 'Line' + 'Two')" , "-- prints:" , "-- Line One" , "--" , "-- Line Two" , "print(doc.render(example_doc))" , "" , "-- prints:" , "-- Line" , "-- One" , "--" , "-- Line" , "-- Two" , "local columns = 5" , "print(doc.render(example_doc, columns))" ]render (doc[, colwidth[, style]])
Render the Doc using the given column width.
Parameters:
doc : Doc to render
colwidth : Maximum number of characters per line
style : Whether to generate 'plain' or 'ANSI' terminal output. Must be either 'plain' or 'ansi'. Defaults to 'plain'. (string)
All functions return a fresh Doc element.
after_break
Creates a Doc which is conditionally included only if it comes at the beginning of a line.
before_non_blank (doc)
Conditionally includes the given Doc unless it is followed by a blank space.
blankline
Inserts a blank line unless one exists already.
blanklines (n)
Insert blank lines unless they exist already.
Parameters:
n : Number of blank lines to insert.
braces (doc)
Puts a Doc in curly braces.
brackets (doc)
Puts a Doc in square brackets.
cblock (width, doc)
Like lblock but aligned centered.
Parameters:
width : Width of the created block, in characters
doc : Contents of the block ([Doc])
chomp (doc)
Chomps trailing blank space off of a Doc.
concat (docs[, sep])
Concatenate the given Docs, interspersing sep if specified.
Parameters:
docs : List of Docs
sep : Separator Doc
A carriage return. Does nothing if we're at the beginning of a line; otherwise inserts a newline.
double_quotes (doc)
Wraps a Doc in double quotes
The empty document.
flush (doc)
Makes a Doc flush against the left margin.
hang (indent, start, doc)
Creates a hanging indent.
Parameters:
indent : Indentation width in characters
start : Start, printed unindented
doc : Doc which is indented by indent spaces on every line.
inside (start, end, contents)
Encloses a Doc inside a start and end Doc.
Parameters:
start : Doc before contents
end : Doc after contents
contents : Contents Doc
lblock (width, doc)
Creates a block with the given width and content, aligned to the left.
Parameters:
width : Width of the created block, in characters
doc : Contents of the block ([Doc])
literal (string)
Creates a Doc from a string.
nest (indent)
Indents a Doc by the specified number of spaces.
Parameters:
indent : Indentation width.
nestle (doc)
Removes leading blank lines from a Doc.
nowrap (doc)
Makes a Doc non-reflowable.
parens (doc)
Puts a Doc in parentheses.
prefixed (prefix, doc)
Uses the specified string as a prefix for every line of the inside document (except the first, if not at the beginning of the line).
Parameters:
prefix : Prefix to prepend to each line
doc : Inside Doc.
quotes (doc)
Wraps a Doc in single quotes.
rblock (indent, doc)
Like lblock but aligned to the right.
Parameters:
width : Width of the created block, in characters
doc : Contents of the block ([Doc])
A breaking (reflowable) space.
vfill
Creates an expandable border that, when placed next to a box, expands to the height of the box.
Parameters:
text : Border text
Concatenate two Doc elements.
Concatenate two Docs, inserting a reflowable space between them.
If a and b are Doc elements, then a / b puts a above b.
If a and b are Doc elements, then a // b puts a above b, inserting a blank line between them.
is_empty (doc)
Returns true iff doc is the empty document, false otherwise.
min_offset (doc)
Returns the minimal width of a @'Doc'@ when reflowed at breakable spaces.
update_column (doc, i)
Returns the column that would be occupied by the last laid out character.
height (doc)
Returns the height of a block or other Doc.
real_length (str)
Returns the real length of a string in a monospace font: 0 for a combining character, 1, for a regular character, 2 for an East Asian wide character.
offset (doc)
Returns the width of a Doc (as number of characters).
This package is made available under the MIT license. See LICENSE for details.