Modulepandoc-3.12
Text.Pandoc.Parsing
- 20 types
- 10 classes
- 160 values
- Packagepandoc-3.12
- Exports190
- LicenceGPL-2.0-or-later
- SourceCombinator.hs
anyOrderedListMarker :: (Stream s m Char, UpdateSourcePos s Char) => ParsecT s ParserState m ListAttributeslowerAlpha :: (Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m (ListNumberStyle, Int)lowerRoman :: (Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m (ListNumberStyle, Int)upperAlpha :: (Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m (ListNumberStyle, Int)upperRoman :: (Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m (ListNumberStyle, Int)mathDisplay :: (HasReaderOptions st, Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m TextmathInline :: (HasReaderOptions st, Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m Textdash :: (HasReaderOptions st, Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m InlinesdoubleQuoteStart :: (HasLastStrPosition st, HasQuoteContext st m, Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m ()singleQuoteStart :: (HasLastStrPosition st, HasQuoteContext st m, Stream s m Char, UpdateSourcePos s Char) => ParsecT s st m ()The parser anyToken accepts any kind of token. It is for example
used to implement eof. Returns the accepted token.
choice ps tries to apply the parsers in the list ps in order,
until one of them succeeds. Returns the value of the succeeding
parser.
count n p parses n occurrences of p. If n is smaller or
equal to zero, the parser equals to return []. Returns a list of
n values returned by p.
endBy p sep parses zero or more occurrences of p, separated
and ended by sep. Returns a list of values returned by p.
cStatements = cStatement `endBy` semiendBy1 p sep parses one or more occurrences of p, separated
and ended by sep. Returns a list of values returned by p.
This parser only succeeds at the end of the input. This is not a primitive parser but it is defined using notFollowedBy.
eof = notFollowedBy anyToken <?> "end of input"manyTill p end applies parser p zero or more times until
parser end succeeds. Returns the list of values returned by p.
This parser can be used to scan comments:
simpleComment = do{ string "<!--"
; manyTill anyChar (try (string "-->"))
}Note the overlapping parsers anyChar and string "-->", and
therefore the use of the try combinator.
notFollowedBy p only succeeds when parser p fails. This parser
does not consume any input. This parser can be used to implement the
'longest match' rule. For example, when recognizing keywords (for
example let), we want to make sure that a keyword is not followed
by a legal identifier character, in which case the keyword is
actually an identifier (for example lets). We can program this
behaviour as follows:
keywordLet = try (do{ string "let"
; notFollowedBy alphaNum
})NOTE: Currently, notFollowedBy exhibits surprising behaviour
when applied to a parser p that doesn't consume any input;
specifically
notFollowedBy . notFollowedByis not equivalent to lookAhead, andnotFollowedBy eofnever fails.
See haskell/parsec#8 for more details.
option x p tries to apply parser p. If p fails without
consuming input, it returns the value x, otherwise the value
returned by p.
priority = option 0 (do{ d <- digit
; return (digitToInt d)
})optional p tries to apply parser p. It will parse p or nothing.
It only fails if p fails after consuming input. It discards the result
of p.
sepBy p sep parses zero or more occurrences of p, separated
by sep. Returns a list of values returned by p.
commaSep p = p `sepBy` (symbol ",")sepBy1 p sep parses one or more occurrences of p, separated
by sep. Returns a list of values returned by p.
sepEndBy p sep parses zero or more occurrences of p,
separated and optionally ended by sep, ie. haskell style
statements. Returns a list of values returned by p.
haskellStatements = haskellStatement `sepEndBy` semisepEndBy1 p sep parses one or more occurrences of p,
separated and optionally ended by sep. Returns a list of values
returned by p.
skipMany1 p applies the parser p one or more times, skipping
its result.
Extracts the list of error messages from the parse error
Extract the message string from an error message
Increments the column number of a source position.
Increments the line number of a source position.
Create a new SourcePos with the given source name, and line number and column number set to 1, the upper left.
Create a new SourcePos with the given source name, line number and column number.
Set the column number of a source position.
Set the line number of a source position.
Set the name of the source.
Extracts the column number from a source position.
Extracts the line number from a source position.
Extracts the name of the source from a source position.
The expression updatePosString pos s updates the source position
pos by calling updatePosChar on every character in s, ie.
foldl updatePosChar pos string.
The parser p <?> msg behaves as parser p, but whenever the
parser p fails without consuming any input, it replaces expect
error messages with the expect error message msg.
This is normally used at the end of a set alternatives where we want
to return an error message in terms of a higher level construct
rather than returning all possible characters. For example, if the
expr parser from the try example would fail, the error
message is: '...: expecting expression'. Without the (<?>)
combinator, the message would be like '...: expecting "let" or
letter', which is less friendly.
This combinator implements choice. The parser p <|> q first
applies p. If it succeeds, the value of p is returned. If p
fails without consuming any input, parser q is tried. This
combinator is defined equal to the mplus member of the MonadPlus
class and the (<|>) member of Alternative.
The parser is called predictive since q is only tried when
parser p didn't consume any input (i.e.. the look ahead is 1).
This non-backtracking behaviour allows for both an efficient
implementation of the parser combinators and the generation of good
error messages.
Returns the current input
Returns the current source position. See also SourcePos.
Returns the current user state.
lookAhead p parses p without consuming any input.
If p fails and consumes some input, so does lookAhead. Combine with try
if this is undesirable.
many p applies the parser p zero or more times. Returns a
list of the returned values of p.
identifier = do{ c <- letter
; cs <- many (alphaNum <|> char '_')
; return (c:cs)
}many1 p applies the parser p one or more times. Returns a
list of the returned values of p.
word = many1 letterparse p filePath input runs a parser p over Identity without user
state. The filePath is only used in error messages and may be the
empty string. Returns either a ParseError (Left)
or a value of type a (Right).
main = case (parse numbers "" "11, 2, 43") of
Left err -> print err
Right xs -> print (sum xs)
numbers = commaSep integerThe most general way to run a parser over the Identity monad. runParser p state filePath
input runs parser p on the input list of tokens input,
obtained from source filePath with the initial user state st.
The filePath is only used in error messages and may be the empty
string. Returns either a ParseError (Left) or a
value of type a (Right).
parseFromFile p fname
= do{ input <- readFile fname
; return (runParser p () fname input)
}The most general way to run a parser. runParserT p state filePath
input runs parser p on the input list of tokens input,
obtained from source filePath with the initial user state st.
The filePath is only used in error messages and may be the empty
string. Returns a computation in the underlying monad m that return either a ParseError (Left) or a
value of type a (Right).
setInput input continues parsing with input. The getInput and
setInput functions can for example be used to deal with #include
files.
setPosition pos sets the current source position to pos.
An alias for putState for backwards compatibility.
skipMany p applies the parser p zero or more times, skipping
its result.
spaces = skipMany spacetokenPrim The parser tokenPrim showTok nextPos testTok accepts a token t
with result x when the function testTok t returns Just x. The
token can be shown using showTok t. The position of the next
token should be returned when nextPos is called with the current
source position pos, the current token t and the rest of the
tokens toks, nextPos pos t toks.
This is the most primitive combinator for accepting tokens. For example, the char parser could be implemented as:
char c
= tokenPrim showChar nextPos testChar
where
showChar x = "'" ++ x ++ "'"
testChar x = if x == c then Just x else Nothing
nextPos pos x xs = updatePosChar pos xThe parser try p behaves like parser p, except that it
pretends that it hasn't consumed any input when an error occurs.
This combinator is used whenever arbitrary look ahead is needed.
Since it pretends that it hasn't consumed any input when p fails,
the (<|>) combinator will try its second alternative even when the
first parser failed while consuming input.
The try combinator can for example be used to distinguish
identifiers and reserved words. Both reserved words and identifiers
are a sequence of letters. Whenever we expect a certain reserved
word where we can also expect an identifier we have to use the try
combinator. Suppose we write:
expr = letExpr <|> identifier <?> "expression"
letExpr = do{ string "let"; ... }
identifier = many1 letterIf the user writes "lexical", the parser fails with: unexpected
'x', expecting 't' in "let". Indeed, since the (<|>) combinator
only tries alternatives when the first alternative hasn't consumed
input, the identifier parser is never tried (because the prefix
"le" of the string "let" parser is already consumed). The
right behaviour can be obtained by adding the try combinator:
expr = letExpr <|> identifier <?> "expression"
letExpr = do{ try (string "let"); ... }
identifier = many1 letterThe parser unexpected msg always fails with an unexpected error
message msg without consuming any input.
The parsers fail, (<?>) and unexpected are the three parsers
used to generate error messages. Of these, only (<?>) is commonly
used. For an example of the use of unexpected, see the definition
of notFollowedBy.
An alias for modifyState for backwards compatibility.
Methods
extractIdentifierList :: st -> Set TextupdateIdentifierList :: (Set Text -> Set Text) -> st -> st
Instances9HasIdentifierList, …
HasIdentifierList ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasIdentifierList HTMLStateDefined in pandoc-3.12 · Text.Pandoc.Readers.HTML.TypesHasIdentifierList LaTeXStateDefined in pandoc-3.12 · Text.Pandoc.Readers.LaTeX.ParsingHasIdentifierList ManStateDefined in pandoc-3.12 · Text.Pandoc.Readers.ManHasIdentifierList MWStateDefined in pandoc-3.12 · Text.Pandoc.Readers.MediaWikiHasIdentifierList MuseStateDefined in pandoc-3.12 · Text.Pandoc.Readers.MuseHasIdentifierList OrgParserStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Org.ParserStateHasIdentifierList PodStateDefined in pandoc-3.12 · Text.Pandoc.Readers.PodHasIdentifierList PStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Typst.Parsing
Methods
getIncludeFiles :: st -> [Text]addIncludeFile :: Text -> st -> stdropLatestIncludeFile :: st -> st
Instances3HasIncludeFiles
HasIncludeFiles ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasIncludeFiles LaTeXStateDefined in pandoc-3.12 · Text.Pandoc.Readers.LaTeX.ParsingHasIncludeFiles OrgParserStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Org.ParserState
Methods
setLastStrPos :: Maybe SourcePos -> st -> stgetLastStrPos :: st -> Maybe SourcePos
Instances4HasLastStrPosition
HasLastStrPosition ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasLastStrPosition HTMLStateDefined in pandoc-3.12 · Text.Pandoc.Readers.HTML.TypesHasLastStrPosition MuseStateDefined in pandoc-3.12 · Text.Pandoc.Readers.MuseHasLastStrPosition OrgParserStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Org.ParserState
Methods
addLogMessage :: LogMessage -> st -> stgetLogMessages :: st -> [LogMessage]
Instances10HasLogMessages, …
HasLogMessages ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasLogMessages HTMLStateDefined in pandoc-3.12 · Text.Pandoc.Readers.HTML.TypesHasLogMessages LaTeXStateDefined in pandoc-3.12 · Text.Pandoc.Readers.LaTeX.ParsingHasLogMessages ManStateDefined in pandoc-3.12 · Text.Pandoc.Readers.ManHasLogMessages MdocStateDefined in pandoc-3.12 · Text.Pandoc.Readers.MdocHasLogMessages MWStateDefined in pandoc-3.12 · Text.Pandoc.Readers.MediaWikiHasLogMessages MuseStateDefined in pandoc-3.12 · Text.Pandoc.Readers.MuseHasLogMessages OrgParserStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Org.ParserStateHasLogMessages PodStateDefined in pandoc-3.12 · Text.Pandoc.Readers.PodHasLogMessages PStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Typst.Parsing
Methods
extractMacros :: st -> Map Text MacroupdateMacros :: (Map Text Macro -> Map Text Macro) -> st -> st
Instances4HasMacros
HasMacros ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasMacros HTMLStateDefined in pandoc-3.12 · Text.Pandoc.Readers.HTML.TypesHasMacros LaTeXStateDefined in pandoc-3.12 · Text.Pandoc.Readers.LaTeX.ParsingHasMacros OrgParserStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Org.ParserState
Methods
getQuoteContext :: Stream s m t => ParsecT s st m QuoteContextwithQuoteContext :: QuoteContext -> ParsecT s st m a -> ParsecT s st m a
Instances4HasQuoteContext
Monad m => HasQuoteContext ParserState mDefined in pandoc-3.12 · Text.Pandoc.Parsing.StatePandocMonad m => HasQuoteContext LaTeXState mDefined in pandoc-3.12 · Text.Pandoc.Readers.LaTeX.ParsingMonad m => HasQuoteContext st (ReaderT OrgParserLocal m)Defined in pandoc-3.12 · Text.Pandoc.Readers.Org.ParserStatePandocMonad m => HasQuoteContext HTMLState (ReaderT HTMLLocal m)Defined in pandoc-3.12 · Text.Pandoc.Readers.HTML.Types
Methods
extractReaderOptions :: st -> ReaderOptionsgetOption :: Stream s m t => (ReaderOptions -> b) -> ParsecT s st m b
Instances9HasReaderOptions, …
HasReaderOptions ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasReaderOptions HTMLStateDefined in pandoc-3.12 · Text.Pandoc.Readers.HTML.TypesHasReaderOptions LaTeXStateDefined in pandoc-3.12 · Text.Pandoc.Readers.LaTeX.ParsingHasReaderOptions ManStateDefined in pandoc-3.12 · Text.Pandoc.Readers.ManHasReaderOptions MWStateDefined in pandoc-3.12 · Text.Pandoc.Readers.MediaWikiHasReaderOptions MuseStateDefined in pandoc-3.12 · Text.Pandoc.Readers.MuseHasReaderOptions OrgParserStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Org.ParserStateHasReaderOptions PodStateDefined in pandoc-3.12 · Text.Pandoc.Readers.PodHasReaderOptions PStateDefined in pandoc-3.12 · Text.Pandoc.Readers.Typst.Parsing
Instances2Eq, Show
Eq QuoteContextDefined in pandoc-3.12 · Text.Pandoc.Parsing.CapabilitiesShow QuoteContextDefined in pandoc-3.12 · Text.Pandoc.Parsing.Capabilities
Constructors
FuturerunDelayed :: Reader s a
Instances5Monad, Functor, Applicative, Semigroup, Monoid
Monad (Future s)Defined in pandoc-3.12 · Text.Pandoc.Parsing.FutureFunctor (Future s)Defined in pandoc-3.12 · Text.Pandoc.Parsing.FutureApplicative (Future s)Defined in pandoc-3.12 · Text.Pandoc.Parsing.FutureSemigroup a => Semigroup (Future s a)Defined in pandoc-3.12 · Text.Pandoc.Parsing.FutureMonoid a => Monoid (Future s a)Defined in pandoc-3.12 · Text.Pandoc.Parsing.Future
Constructors
Constructors
Instances2Eq, Show
Eq HeaderTypeDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateShow HeaderTypeDefined in pandoc-3.12 · Text.Pandoc.Parsing.State
Instances2Eq, Show
Eq ParserContextDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateShow ParserContextDefined in pandoc-3.12 · Text.Pandoc.Parsing.State
Constructors
ParserStatestateOptions :: ReaderOptionsstateParserContext :: ParserContextstateQuoteContext :: QuoteContextstateAllowLinks :: BoolstateAllowLineBreaks :: BoolstateLastStrPos :: Maybe SourcePosstateKeys :: KeyTablestateHeaderKeys :: KeyTablestateSubstitutions :: SubstTablestateNotes :: NoteTablestateNotes' :: NoteTable'stateNoteRefs :: Set TextstateInNote :: BoolstateNoteNumber :: IntstateMeta :: MetastateMeta' :: Future ParserState MetastateCitations :: Map Text TextstateHeaderTable :: [HeaderType]stateIdentifiers :: Set TextstateNextExample :: IntstateExamples :: Map Text IntstateMacros :: Map Text MacrostateRstDefaultRole :: TextstateRstHighlight :: Maybe TextstateRstCustomRoles :: Map Text (Text, Maybe Text, Attr)stateCaption :: Maybe InlinesstateInHtmlBlock :: Maybe TextstateFencedDivLevel :: IntstateContainers :: [Text]stateLogMessages :: [LogMessage]stateMarkdownAttribute :: Bool
Instances9Default, HasMeta, HasIdentifierList, HasIncludeFiles, HasLastStrPosition, HasLogMessages, …
Default ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasMeta ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasIdentifierList ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasIncludeFiles ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasLastStrPosition ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasLogMessages ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasMacros ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateHasReaderOptions ParserStateDefined in pandoc-3.12 · Text.Pandoc.Parsing.StateMonad m => HasQuoteContext ParserState mDefined in pandoc-3.12 · Text.Pandoc.Parsing.State
Instances7Show, IsString, Semigroup, Monoid, ToSources, UpdateSourcePos, …
Show SourcesDefined in pandoc-3.12 · Text.Pandoc.SourcesIsString SourcesDefined in pandoc-3.12 · Text.Pandoc.SourcesSemigroup SourcesDefined in pandoc-3.12 · Text.Pandoc.SourcesMonoid SourcesDefined in pandoc-3.12 · Text.Pandoc.SourcesToSources SourcesDefined in pandoc-3.12 · Text.Pandoc.SourcesUpdateSourcePos Sources CharDefined in pandoc-3.12 · Text.Pandoc.SourcesMonad m => Stream Sources m CharDefined in pandoc-3.12 · Text.Pandoc.Sources
Methods
updateSourcePos :: SourcePos -> c -> s -> SourcePos
Instances5UpdateSourcePos
UpdateSourcePos ByteString CharDefined in pandoc-3.12 · Text.Pandoc.SourcesUpdateSourcePos ByteString CharDefined in pandoc-3.12 · Text.Pandoc.SourcesUpdateSourcePos Sources CharDefined in pandoc-3.12 · Text.Pandoc.SourcesUpdateSourcePos Text CharDefined in pandoc-3.12 · Text.Pandoc.SourcesUpdateSourcePos [Char] CharDefined in pandoc-3.12 · Text.Pandoc.Sources
Instances3Eq, Show, Exception
Eq ParseErrorDefined in parsec-3.1.18.0 · Text.Parsec.ErrorShow ParseErrorDefined in parsec-3.1.18.0 · Text.Parsec.ErrorException ParseErrorDefined in parsec-3.1.18.0 · Text.Parsec.Error
ParserT monad transformer and Parser type
ParsecT s u m a is a parser with stream type s, user state type u,
underlying monad m and return type a. Parsec is strict in the user state.
If this is undesirable, simply use a data type like data Box a = Box a and
the state type Box YourStateType to add a level of indirection.
Instances15MonadError, MonadReader, MonadState, MonadTrans, Monad, Functor, …
MonadError e m => MonadError e (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimMonadReader r m => MonadReader r (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimMonadState s m => MonadState s (ParsecT s' u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimMonadTrans (ParsecT s u)Defined in parsec-3.1.18.0 · Text.Parsec.PrimMonad (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimFunctor (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimMonadFail (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimApplicative (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimAlternative (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimMonadPlus (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimMonadIO m => MonadIO (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimMonadCont m => MonadCont (ParsecT s u m)Defined in parsec-3.1.18.0 · Text.Parsec.PrimPandocMonad m => PandocMonad (ParsecT s st m)Defined in pandoc-3.12 · Text.Pandoc.Class.PandocMonadSemigroup a => Semigroup (ParsecT s u m a)Defined in parsec-3.1.18.0 · Text.Parsec.PrimThe Semigroup instance for ParsecT is used to append the result of several parsers, for example:
(many $ chara) <> (many $ charb)The above will parse a string like
"aabbb"and return a successful parse result"aabbb". Compare against the below which will produce a result of"bbb"for the same input:(many $ chara) >> (many $ charb) (many $ chara) *> (many $ charb)(Monoid a, Semigroup (ParsecT s u m a)) => Monoid (ParsecT s u m a)Defined in parsec-3.1.18.0 · Text.Parsec.Prim
An instance of Stream has stream type s, underlying monad m and token type t determined by the stream
Some rough guidelines for a "correct" instance of Stream:
unfoldM uncons gives the [t] corresponding to the stream
A
Streaminstance is responsible for maintaining the "position within the stream" in the stream states. This is trivial unless you are using the monad in a non-trivial way.
Instances7Stream, …
Monad m => Stream ByteString m CharDefined in parsec-3.1.18.0 · Text.Parsec.PrimMonad m => Stream ByteString m CharDefined in parsec-3.1.18.0 · Text.Parsec.PrimMonad m => Stream TokStream m TokDefined in pandoc-3.12 · Text.Pandoc.Readers.LaTeX.ParsingMonad m => Stream Sources m CharDefined in pandoc-3.12 · Text.Pandoc.SourcesMonad m => Stream Text m CharDefined in parsec-3.1.18.0 · Text.Parsec.PrimMonad m => Stream Text m CharDefined in parsec-3.1.18.0 · Text.Parsec.PrimMonad m => Stream [tok] m tokDefined in parsec-3.1.18.0 · Text.Parsec.Prim