| pandoc-1.5.1.1: Conversion between markup formats | Source code | Contents | Index

Text.Pandoc.Shared

Portability | portable
Stability | alpha
Maintainer | John MacFarlane <jgm@berkeley.edu>

Contents

List processing
Text processing
Parsing
Prettyprinting
Pandoc block and inline list processing
Writer options
File handling

Description
Utility functions and definitions used by the various Pandoc modules.
Synopsis

splitBy :: Eq a => a -> [a] -> [[a]]
splitByIndices :: [Int] -> [a] -> [[a]]
substitute :: Eq a => [a] -> [a] -> [a] -> [a]
backslashEscapes :: [Char] -> [(Char, String)]
escapeStringUsing :: [(Char, String)] -> String -> String
stripTrailingNewlines :: String -> String
removeLeadingTrailingSpace :: String -> String
removeLeadingSpace :: String -> String
removeTrailingSpace :: String -> String
stripFirstAndLast :: String -> String
camelCaseToHyphenated :: String -> String
toRomanNumeral :: Int -> String
escapeURI :: String -> String
unescapeURI :: String -> String
wrapped :: Monad m => ([Inline] -> m Doc) -> [Inline] -> m Doc
wrapIfNeeded :: Monad m => WriterOptions -> ([Inline] -> m Doc) -> [Inline] -> m Doc
wrappedTeX :: Monad m => Bool -> ([Inline] -> m Doc) -> [Inline] -> m Doc
wrapTeXIfNeeded :: Monad m => WriterOptions -> Bool -> ([Inline] -> m Doc) -> [Inline] -> m Doc

data BlockWrapper

= Pad Doc
| Reg Doc

wrappedBlocksToDoc :: [BlockWrapper] -> Doc
tabFilter :: Int -> String -> String
(>>~) :: Monad m => m a -> m b -> m a
anyLine :: GenParser Char st [Char]
many1Till :: GenParser tok st a -> GenParser tok st end -> GenParser tok st [a]
notFollowedBy' :: Show b => GenParser a st b -> GenParser a st ()
oneOfStrings :: [String] -> GenParser Char st String
spaceChar :: CharParser st Char
skipSpaces :: GenParser Char st ()
blankline :: GenParser Char st Char
blanklines :: GenParser Char st [Char]
enclosed :: GenParser Char st t -> GenParser Char st end -> GenParser Char st a -> GenParser Char st [a]
stringAnyCase :: [Char] -> CharParser st String
parseFromString :: GenParser tok st a -> [tok] -> GenParser tok st a
lineClump :: GenParser Char st String
charsInBalanced :: Char -> Char -> GenParser Char st String
charsInBalanced' :: Char -> Char -> GenParser Char st String
romanNumeral :: Bool -> GenParser Char st Int
emailAddress :: GenParser Char st (String, String)
uri :: GenParser Char st (String, String)
withHorizDisplacement :: GenParser Char st a -> GenParser Char st (a, Int)
nullBlock :: GenParser Char st Block
failIfStrict :: GenParser Char ParserState ()
failUnlessLHS :: GenParser tok ParserState ()
escaped :: GenParser Char st Char -> GenParser Char st Inline
anyOrderedListMarker :: GenParser Char st ListAttributes
orderedListMarker :: ListNumberStyle -> ListNumberDelim -> GenParser Char st Int
charRef :: GenParser Char st Inline
readWith :: GenParser Char ParserState a -> ParserState -> String -> a
testStringWith :: Show a => GenParser Char ParserState a -> String -> IO ()

data ParserState = ParserState {

stateParseRaw :: Bool
stateParserContext :: ParserContext
stateQuoteContext :: QuoteContext
stateSanitizeHTML :: Bool
stateKeys :: KeyTable
stateNotes :: NoteTable
stateTabStop :: Int
stateStandalone :: Bool
stateTitle :: [Inline]
stateAuthors :: [[Inline]]
stateDate :: [Inline]
stateStrict :: Bool
stateSmart :: Bool
stateLiterateHaskell :: Bool
stateColumns :: Int
stateHeaderTable :: [HeaderType]
stateIndentedCodeClasses :: [String]

}

defaultParserState :: ParserState

data HeaderType

= SingleHeader Char
| DoubleHeader Char

data ParserContext

= ListItemState
| NullState

data QuoteContext

= InSingleQuote
| InDoubleQuote
| NoQuote

type NoteTable = [(String, String)]
type KeyTable = [([Inline], Target)]
lookupKeySrc :: KeyTable -> [Inline] -> Maybe Target
refsMatch :: [Inline] -> [Inline] -> Bool
hang' :: Doc -> Int -> Doc -> Doc
prettyPandoc :: Pandoc -> String
orderedListMarkers :: (Int, ListNumberStyle, ListNumberDelim) -> [String]
normalizeSpaces :: [Inline] -> [Inline]
compactify :: [[Block]] -> [[Block]]

data Element

= Blk Block
| Sec Int [Int] String [Inline] [Element]

hierarchicalize :: [Block] -> [Element]
uniqueIdent :: [Inline] -> [String] -> String
isHeaderBlock :: Block -> Bool

data HTMLMathMethod

= PlainMath
| LaTeXMathML (Maybe String)
| JsMath (Maybe String)
| GladTeX
| MimeTeX String
| MathML (Maybe String)

data ObfuscationMethod

= NoObfuscation
| ReferenceObfuscation
| JavascriptObfuscation

data WriterOptions = WriterOptions {

writerStandalone :: Bool
writerTemplate :: String
writerVariables :: [(String, String)]
writerIncludeBefore :: String
writerIncludeAfter :: String
writerTabStop :: Int
writerTableOfContents :: Bool
writerS5 :: Bool
writerXeTeX :: Bool
writerHTMLMathMethod :: HTMLMathMethod
writerIgnoreNotes :: Bool
writerIncremental :: Bool
writerNumberSections :: Bool
writerStrictMarkdown :: Bool
writerReferenceLinks :: Bool
writerWrapText :: Bool
writerLiterateHaskell :: Bool
writerEmailObfuscation :: ObfuscationMethod
writerIdentifierPrefix :: String

}

defaultWriterOptions :: WriterOptions
inDirectory :: FilePath -> IO a -> IO a
readDataFile :: Maybe FilePath -> FilePath -> IO String

List processing

splitBy :: Eq a => a -> [a] -> [[a]] | Source

Split list by groups of one or more sep.

splitByIndices :: [Int] -> [a] -> [[a]] | Source

Split list into chunks divided at specified indices.

substitute :: Eq a => [a] -> [a] -> [a] -> [a] | Source

Replace each occurrence of one sublist in a list with another.
Text processing

backslashEscapes | Source

:: [Char] | list of special characters to escape
-> [(Char, String)] |
Returns an association list of backslash escapes for the designated characters.

escapeStringUsing :: [(Char, String)] -> String -> String | Source

Escape a string of characters, using an association list of characters and strings.

stripTrailingNewlines :: String -> String | Source

Strip trailing newlines from string.

removeLeadingTrailingSpace :: String -> String | Source

Remove leading and trailing space (including newlines) from string.

removeLeadingSpace :: String -> String | Source

Remove leading space (including newlines) from string.

removeTrailingSpace :: String -> String | Source

Remove trailing space (including newlines) from string.

stripFirstAndLast :: String -> String | Source

Strip leading and trailing characters from string

camelCaseToHyphenated :: String -> String | Source

Change CamelCase word to hyphenated lowercase (e.g., camel-case).

toRomanNumeral :: Int -> String | Source

Convert number < 4000 to uppercase roman numeral.

escapeURI :: String -> String | Source

Escape unicode characters in a URI. Characters that are already valid in a URI, including % and ?, are left alone.

unescapeURI :: String -> String | Source

Unescape unicode and some special characters in a URI, but without introducing spaces.

wrapped :: Monad m => ([Inline] -> m Doc) -> [Inline] -> m Doc | Source

Wrap inlines to line length.

wrapIfNeeded :: Monad m => WriterOptions -> ([Inline] -> m Doc) -> [Inline] -> m Doc | Source

Wrap inlines if the text wrap option is selected.

wrappedTeX :: Monad m => Bool -> ([Inline] -> m Doc) -> [Inline] -> m Doc | Source

Wrap inlines to line length, treating footnotes in a way that makes sense in LaTeX and ConTeXt.

wrapTeXIfNeeded :: Monad m => WriterOptions -> Bool -> ([Inline] -> m Doc) -> [Inline] -> m Doc | Source

Wrap inlines if the text wrap option is selected, specialized for LaTeX and ConTeXt.

data BlockWrapper | Source

Indicates whether block should be surrounded by blank lines (`Pad`) or not (`Reg`).
Constructors

Pad Doc |
Reg Doc |

wrappedBlocksToDoc :: [BlockWrapper] -> Doc | Source

Converts a list of wrapped blocks to a Doc, with appropriate spaces around blocks.

tabFilter | Source

:: Int | Tab stop
-> String | Input
-> String |
Convert tabs to spaces and filter out DOS line endings. Tabs will be preserved if tab stop is set to 0.

Parsing

(>>~) :: Monad m => m a -> m b -> m a | Source

Like >>, but returns the operation on the left. (Suggested by Tillmann Rendel on Haskell-cafe list.)

anyLine :: GenParser Char st [Char] | Source

Parse any line of text

many1Till :: GenParser tok st a -> GenParser tok st end -> GenParser tok st [a] | Source

Like `manyTill`, but reads at least one item.

notFollowedBy' :: Show b => GenParser a st b -> GenParser a st () | Source

A more general form of `notFollowedBy`. This one allows any type of parser to be specified, and succeeds only if that parser fails. It does not consume any input.

oneOfStrings :: [String] -> GenParser Char st String | Source

Parses one of a list of strings (tried in order).

spaceChar :: CharParser st Char | Source

Parses a space or tab.

skipSpaces :: GenParser Char st () | Source

Skips zero or more spaces or tabs.

blankline :: GenParser Char st Char | Source

Skips zero or more spaces or tabs, then reads a newline.

blanklines :: GenParser Char st [Char] | Source

Parses one or more blank lines and returns a string of newlines.

enclosed | Source

:: |
=> GenParser Char st t | start parser
-> GenParser Char st end | end parser
-> GenParser Char st a | content parser (to be used repeatedly)
-> GenParser Char st [a] |
Parses material enclosed between start and end parsers.

stringAnyCase :: [Char] -> CharParser st String | Source

Parse string, case insensitive.

parseFromString :: GenParser tok st a -> [tok] -> GenParser tok st a | Source

Parse contents of str using parser and return result.

lineClump :: GenParser Char st String | Source

Parse raw line block up to and including blank lines.

charsInBalanced :: Char -> Char -> GenParser Char st String | Source

Parse a string of characters between an open character and a close character, including text between balanced pairs of open and close, which must be different. For example, `charsInBalanced '(' ')'` will parse (hello (there)) and return hello (there). Stop if a blank line is encountered.

charsInBalanced' :: Char -> Char -> GenParser Char st String | Source

Like `charsInBalanced`, but allow blank lines in the content.

romanNumeral | Source

:: |
=> Bool | Uppercase if true
-> GenParser Char st Int |
Parses a roman numeral (uppercase or lowercase), returns number.

emailAddress :: GenParser Char st (String, String) | Source

Parses an email address; returns original and corresponding escaped mailto: URI.

uri :: GenParser Char st (String, String) | Source

Parses a URI. Returns pair of original and URI-escaped version.

withHorizDisplacement | Source

:: |
=> GenParser Char st a | Parser to apply
-> GenParser Char st (a, Int) | (result, displacement)
Applies a parser, returns tuple of its results and its horizontal displacement (the difference between the source column at the end and the source column at the beginning). Vertical displacement (source row) is ignored.

nullBlock :: GenParser Char st Block | Source

Parses a character and returns `Null` (so that the parser can move on if it gets stuck).

failIfStrict :: GenParser Char ParserState () | Source

Fail if reader is in strict markdown syntax mode.

failUnlessLHS :: GenParser tok ParserState () | Source

Fail unless we're in literate haskell mode.

escaped | Source

:: |
=> GenParser Char st Char | Parser for character to escape
-> GenParser Char st Inline |
Parses backslash, then applies character parser.

anyOrderedListMarker :: GenParser Char st ListAttributes | Source

Parses an ordered list marker and returns list attributes.

orderedListMarker :: ListNumberStyle -> ListNumberDelim -> GenParser Char st Int | Source

Parses an ordered list marker with a given style and delimiter, returns number.

charRef :: GenParser Char st Inline | Source

Parses a character reference and returns a Str element.

readWith | Source

:: |
=> GenParser Char ParserState a | parser
-> ParserState | initial state
-> String | input string
-> a |
Parse a string with a given parser and state.

testStringWith :: Show a => GenParser Char ParserState a -> String -> IO () | Source

Parse a string with `parser` (for testing).

data ParserState | Source

Parsing options.
Constructors

ParserState |

stateParseRaw :: Bool | Parse raw HTML and LaTeX?
stateParserContext :: ParserContext | Inside list?
stateQuoteContext :: QuoteContext | Inside quoted environment?
stateSanitizeHTML :: Bool | Sanitize HTML?
stateKeys :: KeyTable | List of reference keys
stateNotes :: NoteTable | List of notes
stateTabStop :: Int | Tab stop
stateStandalone :: Bool | Parse bibliographic info?
stateTitle :: [Inline] | Title of document
stateAuthors :: [[Inline]] | Authors of document
stateDate :: [Inline] | Date of document
stateStrict :: Bool | Use strict markdown syntax?
stateSmart :: Bool | Use smart typography?
stateLiterateHaskell :: Bool | Treat input as literate haskell
stateColumns :: Int | Number of columns in terminal
stateHeaderTable :: [HeaderType] | Ordered list of header types used
stateIndentedCodeClasses :: [String] | Classes to use for indented code blocks

Instances

Show ParserState

defaultParserState :: ParserState | Source

data HeaderType | Source

Constructors

SingleHeader Char | Single line of characters underneath
DoubleHeader Char | Lines of characters above and below

Instances

Eq HeaderType
Show HeaderType

data ParserContext | Source

Constructors

ListItemState | Used when running parser on list item contents
NullState | Default state

Instances

Eq ParserContext
Show ParserContext

data QuoteContext | Source

Constructors

InSingleQuote | Used when parsing inside single quotes
InDoubleQuote | Used when parsing inside double quotes
NoQuote | Used when not parsing inside quotes

Instances

Eq QuoteContext
Show QuoteContext

type NoteTable = [(String, String)] | Source

type KeyTable = [([Inline], Target)] | Source

lookupKeySrc | Source

:: KeyTable | Key table
-> [Inline] | Key
-> Maybe Target |
Look up key in key table and return target object.

refsMatch :: [Inline] -> [Inline] -> Bool | Source

Returns `True` if keys match (case insensitive).
Prettyprinting

hang' :: Doc -> Int -> Doc -> Doc | Source

A version of hang that works like the version in pretty-1.0.0.0

prettyPandoc :: Pandoc -> String | Source

Prettyprint Pandoc document.
Pandoc block and inline list processing

orderedListMarkers :: (Int, ListNumberStyle, ListNumberDelim) -> [String] | Source

Generate infinite lazy list of markers for an ordered list, depending on list attributes.

normalizeSpaces :: [Inline] -> [Inline] | Source

Normalize a list of inline elements: remove leading and trailing `Space` elements, collapse double `Space`s into singles, and remove empty Str elements.

compactify | Source

:: [[Block]] | List of list items (each a list of blocks)
-> [[Block]] |
Change final list item from `Para` to `Plain` if the list contains no other `Para` blocks.

data Element | Source

Data structure for defining hierarchical Pandoc documents
Constructors

Blk Block |
Sec Int [Int] String [Inline] [Element] |

Instances

Eq Element
Data Element
Read Element
Show Element
Typeable Element

hierarchicalize :: [Block] -> [Element] | Source

Convert list of Pandoc blocks into (hierarchical) list of Elements

uniqueIdent :: [Inline] -> [String] -> String | Source

Generate a unique identifier from a list of inlines. Second argument is a list of already used identifiers.

isHeaderBlock :: Block -> Bool | Source

True if block is a Header block.
Writer options

data HTMLMathMethod | Source

Constructors

PlainMath |
LaTeXMathML (Maybe String) |
JsMath (Maybe String) |
GladTeX |
MimeTeX String |
MathML (Maybe String) |

Instances

Eq HTMLMathMethod
Read HTMLMathMethod
Show HTMLMathMethod

data ObfuscationMethod | Source

Methods for obfuscating email addresses in HTML.
Constructors

NoObfuscation |
ReferenceObfuscation |
JavascriptObfuscation |

Instances

Eq ObfuscationMethod
Read ObfuscationMethod
Show ObfuscationMethod

data WriterOptions | Source

Options for writers
Constructors

WriterOptions |

writerStandalone :: Bool | Include header and footer
writerTemplate :: String | Template to use in standalone mode
writerVariables :: [(String, String)] | Variables to set in template
writerIncludeBefore :: String | Text to include before the body
writerIncludeAfter :: String | Text to include after the body
writerTabStop :: Int | Tabstop for conversion btw spaces and tabs
writerTableOfContents :: Bool | Include table of contents
writerS5 :: Bool | We're writing S5
writerXeTeX :: Bool | Create latex suitable for use by xetex
writerHTMLMathMethod :: HTMLMathMethod | How to print math in HTML
writerIgnoreNotes :: Bool | Ignore footnotes (used in making toc)
writerIncremental :: Bool | Incremental S5 lists
writerNumberSections :: Bool | Number sections in LaTeX
writerStrictMarkdown :: Bool | Use strict markdown syntax
writerReferenceLinks :: Bool | Use reference links in writing markdown, rst
writerWrapText :: Bool | Wrap text to line length
writerLiterateHaskell :: Bool | Write as literate haskell
writerEmailObfuscation :: ObfuscationMethod | How to obfuscate emails
writerIdentifierPrefix :: String | Prefix for section & note ids in HTML

Instances

Show WriterOptions

defaultWriterOptions :: WriterOptions | Source

Default writer options.
File handling

inDirectory :: FilePath -> IO a -> IO a | Source

Perform an IO action in a directory, returning to starting directory.

readDataFile :: Maybe FilePath -> FilePath -> IO String | Source

Read file from specified user data directory or, if not found there, from Cabal data directory.
Produced by Haddock version 2.4.2