hledger-lib-1.3: Core data types, parsers and functionality for the hledger accounting tools

Safe Haskell | None
Language | Haskell2010

Hledger.Utils.String

Contents

- misc
- single-line layout
- multi-line layout
- wide-character-aware layout

Description

String formatting helpers, starting to get a bit out of control.

Synopsis

- lowercase :: String -> String
- uppercase :: String -> String
- underline :: String -> String
- stripbrackets :: String -> String
- unbracket :: String -> String
- quoteIfNeeded :: String -> String
- singleQuoteIfNeeded :: String -> String
- escapeQuotes :: String -> String
- words' :: String -> [String]
- unwords' :: [String] -> String
- stripAnsi :: String -> String
- strip :: String -> String
- lstrip :: String -> String
- rstrip :: String -> String
- chomp :: String -> String
- elideLeft :: Int -> String -> String
- elideRight :: Int -> String -> String
- formatString :: Bool -> Maybe Int -> Maybe Int -> String -> String
- concatTopPadded :: [String] -> String
- concatBottomPadded :: [String] -> String
- concatOneLine :: [String] -> String
- vConcatLeftAligned :: [String] -> String
- vConcatRightAligned :: [String] -> String
- padtop :: Int -> String -> String
- padbottom :: Int -> String -> String
- padleft :: Int -> String -> String
- padright :: Int -> String -> String
- cliptopleft :: Int -> Int -> String -> String
- fitto :: Int -> Int -> String -> String
- charWidth :: Char -> Int
- strWidth :: String -> Int
- takeWidth :: Int -> String -> String
- fitString :: Maybe Int -> Maybe Int -> Bool -> Bool -> String -> String
- fitStringMulti :: Maybe Int -> Maybe Int -> Bool -> Bool -> String -> String
- padLeftWide :: Int -> String -> String
- padRightWide :: Int -> String -> String

# misc

lowercase :: String -> String #

uppercase :: String -> String #

underline :: String -> String #

stripbrackets :: String -> String #

unbracket :: String -> String #

quoteIfNeeded :: String -> String #

Double-quote this string if it contains whitespace, single quotes or double-quotes, escaping the quotes as needed.

singleQuoteIfNeeded :: String -> String #

Single-quote this string if it contains whitespace or double-quotes. No good for strings containing single quotes.

escapeQuotes :: String -> String #

words' :: String -> [String] #

Quote-aware version of words - don't split on spaces which are inside quotes. NB correctly handles "a'b" but not "'`a'`". Can raise an error if parsing fails.

unwords' :: [String] -> String #

Quote-aware version of unwords - single-quote strings which contain whitespace

stripAnsi :: String -> String #

# single-line layout

strip :: String -> String #

Remove leading and trailing whitespace.

lstrip :: String -> String #

Remove leading whitespace.

rstrip :: String -> String #

Remove trailing whitespace.

chomp :: String -> String #

Remove trailing newlines/carriage returns.

elideLeft :: Int -> String -> String #

elideRight :: Int -> String -> String #

formatString :: Bool -> Maybe Int -> Maybe Int -> String -> String #

Clip and pad a string to a minimum & maximum width, andor leftright justify it. Works on multi-line strings too (but will rewrite non-unix line endings).

# multi-line layout

concatTopPadded :: [String] -> String #

Join several multi-line strings as side-by-side rectangular strings of the same height, top-padded. Treats wide characters as double width.

concatBottomPadded :: [String] -> String #

Join several multi-line strings as side-by-side rectangular strings of the same height, bottom-padded. Treats wide characters as double width.

concatOneLine :: [String] -> String #

Join multi-line strings horizontally, after compressing each of them to a single line with a comma and space between each original line.

vConcatLeftAligned :: [String] -> String #

Join strings vertically, left-aligned and right-padded.

vConcatRightAligned :: [String] -> String #

Join strings vertically, right-aligned and left-padded.

padtop :: Int -> String -> String #

Convert a multi-line string to a rectangular string top-padded to the specified height.

padbottom :: Int -> String -> String #

Convert a multi-line string to a rectangular string bottom-padded to the specified height.

padleft :: Int -> String -> String #

Convert a multi-line string to a rectangular string left-padded to the specified width. Treats wide characters as double width.

padright :: Int -> String -> String #

Convert a multi-line string to a rectangular string right-padded to the specified width. Treats wide characters as double width.

cliptopleft :: Int -> Int -> String -> String #

Clip a multi-line string to the specified width and height from the top left.

fitto :: Int -> Int -> String -> String #

Clip and pad a multi-line string to fill the specified width and height.

# wide-character-aware layout

charWidth :: Char -> Int #

Get the designated render width of a character: 0 for a combining character, 1 for a regular character, 2 for a wide character. (Wide characters are rendered as exactly double width in apps and fonts that support it.) (From Pandoc.)

strWidth :: String -> Int #

Calculate the render width of a string, considering wide characters (counted as double width), ANSI escape codes (not counted), and line breaks (in a multi-line string, the longest line determines the width).

takeWidth :: Int -> String -> String #

Double-width-character-aware string truncation. Take as many characters as possible from a string without exceeding the specified width. Eg takeWidth 3 "りんご" = "り".

fitString :: Maybe Int -> Maybe Int -> Bool -> Bool -> String -> String #

General-purpose wide-char-aware single-line string layout function. It can left- or right-pad a short string to a minimum width. It can left- or right-clip a long string to a maximum width, optionally inserting an ellipsis (the third argument). It clips and pads on the right when the fourth argument is true, otherwise on the left. It treats wide characters as double width.

fitStringMulti :: Maybe Int -> Maybe Int -> Bool -> Bool -> String -> String #

A version of fitString that works on multi-line strings, separate for now to avoid breakage. This will rewrite any line endings to unix newlines.

padLeftWide :: Int -> String -> String #

Left-pad a string to the specified width. Treats wide characters as double width. Works on multi-line strings too (but will rewrite non-unix line endings).

padRightWide :: Int -> String -> String #

Right-pad a string to the specified width. Treats wide characters as double width. Works on multi-line strings too (but will rewrite non-unix line endings).