bbcode-0.1.0.1: Library for parsing, constructing, and printing BBCode
Safe HaskellSafe-Inferred
LanguageGHC2021

Text.BBCode.Parser

Synopsis

Documentation

type Parser a = ParsecT Void Text (Reader [El]) a Source #

Parser with reader transformer inside.

Reader environment contains current context for element.

It is used for oneline because "[oneline][oneline][/oneline][/oneline]" should produce error. Same with nfo

Also used by plaintext to end parsing on closing element of current environment.

>>> parseTestEnv bbcode "[i]Bread[/b][/i]"
ElSimple Italic (ElText "Bread[/b]")

Notice it parsed "[/b]". plaintext finishes parsing only on closing element that matches last parsed opening

runParserEnv :: ParsecT e s (Reader r) a -> r -> s -> Either (ParseErrorBundle s e) a Source #

runParser specialized for Parser

runParserMaybeEnv :: ParsecT e s (Reader r) a -> r -> s -> Maybe a Source #

parseMaybe specialized for Parser

parseTestEnv :: Show a => Parser a -> Text -> IO () Source #

parseTest specialized for Parser. Passes empty list to inner reader monad

parsers :: Map El [Parser BBCode] Source #

All parsers used by bbcode and bbcode1

Keys are element names and values are associated element parsers.

Values are lists because some elements have optional element. That means they are two separate parsers, e.g. Box element parsers are box (simple element) and boxAlign (element with parameter)

bbcode :: Parser BBCode Source #

Parse zero or more BBCode elements Doesn't necessarily return value wrapped in ElDocument, it returns (mempty :: BBCode) if it parses no elements, or just element if parses just one element. Otherwise it is ElDocument

bbcode1 :: Parser BBCode Source #

Similar to bbcode but parses one or more elements