pandoc-2.17.1.1: Conversion between markup formats

Copyright | Copyright (C) 2006-2022 John MacFarlane
License | GNU GPL, version 2 or above
Maintainer | John MacFarlane <jgm@berkeley.edu>
Stability | alpha
Portability | portable
Safe Haskell | None
Language | Haskell2010

Text.Pandoc.Shared

Contents

- List processing
- Text processing
- Date/time
- Pandoc block and inline list processing
- TagSoup HTML handling
- File handling
- URI handling
- Error handling
- for squashing blocks
- Safe read
- User data directory
- Version

Description

Utility functions and definitions used by the various Pandoc modules.

Synopsis

- splitBy :: (a -> Bool) -> [a] -> [[a]]
- splitTextBy :: (Char -> Bool) -> Text -> [Text]
- splitTextByIndices :: [Int] -> Text -> [Text]
- ordNub :: Ord a => [a] -> [a]
- findM :: forall m t a. (Monad m, Foldable t) => (a -> m Bool) -> t a -> m (Maybe a)
- inquotes :: Text -> Text
- tshow :: Show a => a -> Text
- elemText :: Char -> Text -> Bool
- notElemText :: Char -> Text -> Bool
- stripTrailingNewlines :: Text -> Text
- trim :: Text -> Text
- triml :: Text -> Text
- trimr :: Text -> Text
- trimMath :: Text -> Text
- stripFirstAndLast :: Text -> Text
- camelCaseToHyphenated :: Text -> Text
- camelCaseStrToHyphenated :: String -> String
- toRomanNumeral :: Int -> Text
- escapeURI :: Text -> Text
- tabFilter :: Int -> Text -> Text
- crFilter :: Text -> Text
- normalizeDate :: Text -> Maybe Text
- orderedListMarkers :: (Int, ListNumberStyle, ListNumberDelim) -> [Text]
- extractSpaces :: (Inlines -> Inlines) -> Inlines -> Inlines
- removeFormatting :: Walkable Inline a => a -> [Inline]
- deNote :: Inline -> Inline
- deLink :: Inline -> Inline
- stringify :: Walkable Inline a => a -> Text
- capitalize :: Walkable Inline a => a -> a
- compactify :: [Blocks] -> [Blocks]
- compactifyDL :: [(Inlines, [Blocks])] -> [(Inlines, [Blocks])]
- linesToPara :: [[Inline]] -> Block
- makeSections :: Bool -> Maybe Int -> [Block] -> [Block]
- uniqueIdent :: Extensions -> [Inline] -> Set Text -> Text
- inlineListToIdentifier :: Extensions -> [Inline] -> Text
- isHeaderBlock :: Block -> Bool
- headerShift :: Int -> Pandoc -> Pandoc
- stripEmptyParagraphs :: Pandoc -> Pandoc
- onlySimpleTableCells :: [[[Block]]] -> Bool
- isTightList :: [[Block]] -> Bool
- taskListItemFromAscii :: Extensions -> [Block] -> [Block]
- taskListItemToAscii :: Extensions -> [Block] -> [Block]
- handleTaskListItem :: ([Inline] -> [Inline]) -> Extensions -> [Block] -> [Block]
- addMetaField :: ToMetaValue a => Text -> a -> Meta -> Meta
- makeMeta :: [Inline] -> [[Inline]] -> [Inline] -> Meta
- eastAsianLineBreakFilter :: Pandoc -> Pandoc
- htmlSpanLikeElements :: Set Text
- filterIpynbOutput :: Maybe Format -> Pandoc -> Pandoc
- renderTags' :: [Tag Text] -> Text
- inDirectory :: FilePath -> IO a -> IO a
- collapseFilePath :: FilePath -> FilePath
- uriPathToPath :: Text -> FilePath
- filteredFilesFromArchive :: Archive -> (FilePath -> Bool) -> [(FilePath, ByteString)]
- schemes :: Set Text
- isURI :: Text -> Bool
- mapLeft :: (a -> b) -> Either a c -> Either b c
- blocksToInlines :: [Block] -> [Inline]
- blocksToInlines' :: [Block] -> Inlines
- blocksToInlinesWithSep :: Inlines -> [Block] -> Inlines
- defaultBlocksSeparator :: Inlines
- safeRead :: (MonadPlus m, Read a) => Text -> m a
- safeStrRead :: (MonadPlus m, Read a) => String -> m a
- defaultUserDataDir :: IO FilePath
- pandocVersion :: Text

# List processing

splitBy :: (a -> Bool) -> [a] -> [[a]] #

Split list by groups of one or more sep.

splitTextBy :: (Char -> Bool) -> Text -> [Text] #

Split text by groups of one or more separator.

splitTextByIndices :: [Int] -> Text -> [Text] #

ordNub :: Ord a => [a] -> [a] #

findM :: forall m t a. (Monad m, Foldable t) => (a -> m Bool) -> t a -> m (Maybe a) #

# Text processing

inquotes :: Text -> Text #

Wrap double quotes around a Text

tshow :: Show a => a -> Text #

elemText :: Char -> Text -> Bool #

`True` exactly when the `Char` appears in the `Text`.

notElemText :: Char -> Text -> Bool #

`True` exactly when the `Char` does not appear in the `Text`.

stripTrailingNewlines :: Text -> Text #

Strip trailing newlines from string.

trim :: Text -> Text #

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

triml :: Text -> Text #

Remove leading space (including newlines) from string.

trimr :: Text -> Text #

Remove trailing space (including newlines) from string.

trimMath :: Text -> Text #

Trim leading space and trailing space unless after .

stripFirstAndLast :: Text -> Text #

Strip leading and trailing characters from string

camelCaseToHyphenated :: Text -> Text #

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

camelCaseStrToHyphenated :: String -> String #

toRomanNumeral :: Int -> Text #

Convert number < 4000 to uppercase roman numeral.

escapeURI :: Text -> Text #

Escape whitespace and some punctuation characters in URI.

tabFilter #

Arguments

:: Int | Tab stop
-> Text | Input
-> Text |

Convert tabs to spaces. Tabs will be preserved if tab stop is set to 0.

crFilter :: Text -> Text #

Deprecated: readers filter crs automatically

Strip out DOS line endings.

# Date/time

normalizeDate :: Text -> Maybe Text #

Parse a date and convert (if possible) to "YYYY-MM-DD" format. We limit years to the range 1601-9999 (ISO 8601 accepts greater than or equal to 1583, but MS Word only accepts dates starting 1601).

# Pandoc block and inline list processing

orderedListMarkers :: (Int, ListNumberStyle, ListNumberDelim) -> [Text] #

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

extractSpaces :: (Inlines -> Inlines) -> Inlines -> Inlines #

Extract the leading and trailing spaces from inside an inline element and place them outside the element. SoftBreaks count as Spaces for these purposes.

removeFormatting :: Walkable Inline a => a -> [Inline] #

Extract inlines, removing formatting.

deNote :: Inline -> Inline #

deLink :: Inline -> Inline #

stringify :: Walkable Inline a => a -> Text #

Convert pandoc structure to a string with formatting removed. Footnotes are skipped (since we don't want their contents in link labels).

capitalize :: Walkable Inline a => a -> a #

Bring all regular text in a pandoc structure to uppercase.

This function correctly handles cases where a lowercase character doesn't match to a single uppercase character – e.g. “Straße” would be converted to “STRASSE”, not “STRAßE”.

compactify #

Arguments

:: [Blocks] | List of list items (each a list of blocks)
-> [Blocks] |

Change final list item from `Para` to `Plain` if the list contains no other `Para` blocks. Otherwise (if the list items contain `Para` blocks besides possibly at the end), turn any `Plain`s into `Para`s (#5285).

compactifyDL :: [(Inlines, [Blocks])] -> [(Inlines, [Blocks])] #

Like `compactify`, but acts on items of definition lists.

linesToPara :: [[Inline]] -> Block #

Convert a list of lines into a paragraph with hard line breaks. This is useful e.g. for rudimentary support of LineBlock elements in writers.

makeSections :: Bool -> Maybe Int -> [Block] -> [Block] #

Put a list of Pandoc blocks into a hierarchical structure: a list of sections (each a Div with class "section" and first element a Header). If the `numbering` parameter is True, Header numbers are added via the number attribute on the header. If the baseLevel parameter is Just n, Header levels are adjusted to be gapless starting at level n.

uniqueIdent :: Extensions -> [Inline] -> Set Text -> Text #

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

inlineListToIdentifier :: Extensions -> [Inline] -> Text #

Convert Pandoc inline list to plain text identifier. HTML identifiers must start with a letter, and may contain only letters, digits, and the characters _-.

isHeaderBlock :: Block -> Bool #

True if block is a Header block.

headerShift :: Int -> Pandoc -> Pandoc #

Shift header levels up or down.

stripEmptyParagraphs :: Pandoc -> Pandoc #

Remove empty paragraphs.

onlySimpleTableCells :: [[[Block]]] -> Bool #

Detect if table rows contain only cells consisting of a single paragraph that has no `LineBreak`.

isTightList :: [[Block]] -> Bool #

Detect if a list is tight.

taskListItemFromAscii :: Extensions -> [Block] -> [Block] #

Convert a list item containing tasklist syntax (e.g. `[x]`) to using `U+2610 BALLOT BOX` or `U+2612 BALLOT BOX WITH X`.

taskListItemToAscii :: Extensions -> [Block] -> [Block] #

Convert a list item containing text starting with `U+2610 BALLOT BOX` or `U+2612 BALLOT BOX WITH X` to tasklist syntax (e.g. `[x]`).

handleTaskListItem :: ([Inline] -> [Inline]) -> Extensions -> [Block] -> [Block] #

addMetaField :: ToMetaValue a => Text -> a -> Meta -> Meta #

Set a field of a `Meta` object. If the field already has a value, convert it into a list with the new value appended to the old value(s).

makeMeta :: [Inline] -> [[Inline]] -> [Inline] -> Meta #

Create `Meta` from old-style title, authors, date. This is provided to ease the transition from the old API.

eastAsianLineBreakFilter :: Pandoc -> Pandoc #

Remove soft breaks between East Asian characters.

htmlSpanLikeElements :: Set Text #

Set of HTML elements that are represented as Span with a class equal as the element tag itself.

filterIpynbOutput :: Maybe Format -> Pandoc -> Pandoc #

Process ipynb output cells. If mode is Nothing, remove all output. If mode is Just format, select best output for the format. If format is not ipynb, strip out ANSI escape sequences from CodeBlocks (see #5633).

# TagSoup HTML handling

renderTags' :: [Tag Text] -> Text #

Render HTML tags.

# File handling

inDirectory :: FilePath -> IO a -> IO a #

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

collapseFilePath :: FilePath -> FilePath #

Remove intermediate "." and ".." directories from a path.

    collapseFilePath "./foo" == "foo"
    collapseFilePath "/bar/../baz" == "/baz"
    collapseFilePath "/../baz" == "/../baz"
    collapseFilePath "parent/foo/baz/../bar" ==  "parent/foo/bar"
    collapseFilePath "parent/foo/baz/../../bar" ==  "parent/bar"
    collapseFilePath "parent/foo/.." ==  "parent"
    collapseFilePath "/parent/foo/../../bar" ==  "/bar"

uriPathToPath :: Text -> FilePath #

filteredFilesFromArchive :: Archive -> (FilePath -> Bool) -> [(FilePath, ByteString)] #

# URI handling

schemes :: Set Text #

Schemes from http://www.iana.org/assignments/uri-schemes.html plus the unofficial schemes doi, javascript, isbn, pmid.

isURI :: Text -> Bool #

Check if the string is a valid URL with a IANA or frequently used but unofficial scheme (see `schemes`).

# Error handling

mapLeft :: (a -> b) -> Either a c -> Either b c #

# for squashing blocks

blocksToInlines :: [Block] -> [Inline] #

blocksToInlines' :: [Block] -> Inlines #

blocksToInlinesWithSep :: Inlines -> [Block] -> Inlines #

defaultBlocksSeparator :: Inlines #

Inline elements used to separate blocks when squashing blocks into inlines.

# Safe read

safeRead :: (MonadPlus m, Read a) => Text -> m a #

safeStrRead :: (MonadPlus m, Read a) => String -> m a #

# User data directory

defaultUserDataDir :: IO FilePath #

Return appropriate user data directory for platform. We use XDG_DATA_HOME (or its default value), but for backwards compatibility, we fall back to the legacy user data directory ($HOME/.pandoc on *nix) if the XDG_DATA_HOME is missing and this exists. If neither directory is present, we return the XDG data directory. If the XDG data directory is not defined (e.g. because we are in an environment where $HOME is not defined), we return the empty string.

# Version

pandocVersion :: Text #

Version number of pandoc library.