packages feed

bookhound-0.2.2: src/Bookhound/Parsers/Text.hs

module Bookhound.Parsers.Text where

import           Bookhound.Parser            (Parser, anyChar)
import           Bookhound.ParserCombinators (IsMatch (..), between,
                                              maybeBetween, maybeSurroundedBy,
                                              surroundedBy, (->>-), (|+), (|?),
                                              (||*), (||+))
import           Bookhound.Parsers.Char      (alpha, alphaNum, closeAngle,
                                              closeCurly, closeParens,
                                              closeSquare, digit, doubleQuote,
                                              lower, newLine, openAngle,
                                              openCurly, openParens, openSquare,
                                              quote, space, spaceOrTab, tab,
                                              upper, whiteSpace)
import           Data.Text                   (Text)
import qualified Data.Text                   as Text


anyString :: Parser Text
anyString = (anyChar ||*)

word :: Parser Text
word = (inverse whiteSpace ||+)

digits :: Parser Text
digits = (digit ||+)

uppers :: Parser Text
uppers = (upper ||+)

lowers :: Parser Text
lowers = (lower ||+)

alphas :: Parser Text
alphas = (alpha ||+)

alphaNums :: Parser Text
alphaNums = (alphaNum ||+)



spaces :: Parser Text
spaces = (space ||+)

tabs :: Parser Text
tabs = (tab ||+)

newLines :: Parser Text
newLines = (newLine ||+)

spacesOrTabs :: Parser Text
spacesOrTabs = (spaceOrTab ||+)

spacing :: Parser Text
spacing = (whiteSpace ||+)

blankLine :: Parser Text
blankLine = (spacesOrTabs |?) ->>- newLine

blankLines :: Parser Text
blankLines = fmap Text.concat (blankLine |+)



betweenQuotes :: Parser b -> Parser b
betweenQuotes = surroundedBy quote

betweenDoubleQuotes :: Parser b -> Parser b
betweenDoubleQuotes = surroundedBy doubleQuote

betweenSpacing :: Parser b -> Parser b
betweenSpacing = surroundedBy spacing

betweenParens :: Parser b -> Parser b
betweenParens = between openParens closeParens

betweenSquare :: Parser b -> Parser b
betweenSquare = between openSquare closeSquare

betweenCurlyBrackets :: Parser b -> Parser b
betweenCurlyBrackets = between openCurly closeCurly

betweenAngleBrackets :: Parser b -> Parser b
betweenAngleBrackets = between openAngle closeAngle



maybeBetweenQuotes :: Parser b -> Parser b
maybeBetweenQuotes = maybeSurroundedBy quote

maybeBetweenDoubleQuotes :: Parser b -> Parser b
maybeBetweenDoubleQuotes = maybeSurroundedBy doubleQuote

maybeBetweenSpacing :: Parser b -> Parser b
maybeBetweenSpacing = maybeSurroundedBy spacing

maybeBetweenParens :: Parser b -> Parser b
maybeBetweenParens = maybeBetween openParens closeParens

maybeBetweenSquareBrackets :: Parser b -> Parser b
maybeBetweenSquareBrackets = maybeBetween openSquare closeSquare

maybeBetweenCurlyBrackets :: Parser b -> Parser b
maybeBetweenCurlyBrackets = maybeBetween openCurly closeCurly

maybeBetweenAngleBrackets :: Parser b -> Parser b
maybeBetweenAngleBrackets = maybeBetween openAngle closeAngle