text-format-heavy-0.1.5.2: Full-weight string formatting library, analog of Python's string.format

Safe HaskellSafe
LanguageHaskell2010

Data.Text.Format.Heavy.Parse

Contents

Description

This module contains parsers for formatting strings. We have to deal with two kinds of strings:

  • String formats. This is the whole construct like "Hello, {}! Your account balance is {1:+8.4}.".
  • Variable formats. This is only part after colon in braces, i.e. the +8.4 thing in previous example.

The string format syntax is supposed to be very stable and simple. There are more than one commonly used formatting string syntax, though. This package provides the following syntaxes:

  • The default syntax, which is basically defined by phrase "any part in braces is variable substitution". This syntax is defined in Data.Text.Format.Heavy.Parse.Braces module.
  • Shell-like syntax, which is basically defined by phrase "any part starting with dollar sign is variable substitution". This syntax is defined in Data.Text.Format.Heavy.Parse.Shell module.

It is possible to define your own syntaxes: you just need to parse an instance of Format type from some sort of string. The default syntax will still remain default, in sence that instance IsString Format is defined in terms of this syntax in Data.Text.Format.Heavy.Instances module.

Variable formats syntax depends on type of data which we are going to format. These formats can be pretty complex, for example they can include alignment, rounding, and so on.

Synopsis

Parse functions

parseFormat :: Text -> Either ParseError Format Source #

Parse string format definition.

parseFormat' :: Text -> Format Source #

Version of parseFormat which throws error in case of syntax error in the formatting string.

parseGenericFormat :: Text -> Either ParseError GenericFormat Source #

Parse generic variable format.

Syntax is:

[[fill]align][sign][#][width][.precision][radix][~conversion]

where:

  • fill - padding character (space by default)
  • align - alignment indicator (<, >, or ^)
  • sign - when to show number's sign (+, -, or space)
  • # - if specified, then for hexadecimal numbers the leading 0x will be added
  • width - minimum length of the field
  • precision - number of decimal places after point, for floatting-point numbers
  • radix - h or x for hexadecimal, d for decimal (default).
  • conversion - text conversion symbol. Supported are: u - convert to upper case, l - convert to lower case, t - convert to title case (capitalize all words).

parseBoolFormat :: Text -> Either ParseError BoolFormat Source #

Parse Bool format.

Syntax is:

TRUE:FALSE

Colon can be replaced with comma or semicolon.

For example, valid format specifications are true:false (the default one), True:False, yes:no, and so on.

parseMaybeFormat :: Text -> Maybe (Text, Text) Source #

Try to parse format for Maybe x type. The syntax is:

someformat|nothing

where someformat is format for the x type, and nothing is the string to be substituted for Nothing value.

Returns Nothing, if format does not contain |. Otherwise, returns Just (someformat, nothing).

Parsec functions

pGenericFormat :: Parsec Text st GenericFormat Source #

Parsec parser for generic (Python-like) variable format.

pBoolFormat :: Parsec Text st BoolFormat Source #

Parsec parser for Bool format