Text.Pandoc.Shared

pandoc-1.16.0.2: Conversion between markup formats

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

Text.Pandoc.Shared

Contents

- List processing
- Text processing
- Date/time
- Pandoc block and inline list processing
- TagSoup HTML handling
- File handling
- Error handling
- Safe read
- Temp directory
- Version

Description

Utility functions and definitions used by the various Pandoc modules.

Synopsis

- splitBy :: (a -> Bool) -> [a] -> [[a]]
- splitByIndices :: [Int] -> [a] -> [[a]]
- splitStringByIndices :: [Int] -> [Char] -> [[Char]]
- substitute :: Eq a => [a] -> [a] -> [a] -> [a]
- ordNub :: Ord a => [a] -> [a]
- backslashEscapes :: [Char] -> [(Char, String)]
- escapeStringUsing :: [(Char, String)] -> String -> String
- stripTrailingNewlines :: String -> String
- trim :: String -> String
- triml :: String -> String
- trimr :: String -> String
- stripFirstAndLast :: String -> String
- camelCaseToHyphenated :: String -> String
- toRomanNumeral :: Int -> String
- escapeURI :: String -> String
- tabFilter :: Int -> String -> String
- normalizeDate :: String -> Maybe String
- orderedListMarkers :: (Int, ListNumberStyle, ListNumberDelim) -> [String]
- normalizeSpaces :: [Inline] -> [Inline]
- extractSpaces :: (Inlines -> Inlines) -> Inlines -> Inlines
- normalize :: Pandoc -> Pandoc
- normalizeInlines :: [Inline] -> [Inline]
- normalizeBlocks :: [Block] -> [Block]
- removeFormatting :: Walkable Inline a => a -> [Inline]
- stringify :: Walkable Inline a => a -> String
- capitalize :: Walkable Inline a => a -> a
- compactify :: [[Block]] -> [[Block]]
- compactify' :: [Blocks] -> [Blocks]
- compactify'DL :: [(Inlines, [Blocks])] -> [(Inlines, [Blocks])]
- data Element
  - = Blk Block
  - | Sec Int [Int] Attr [Inline] [Element]
- hierarchicalize :: [Block] -> [Element]
- uniqueIdent :: [Inline] -> [String] -> String
- isHeaderBlock :: Block -> Bool
- headerShift :: Int -> Pandoc -> Pandoc
- isTightList :: [[Block]] -> Bool
- addMetaField :: ToMetaValue a => String -> a -> Meta -> Meta
- makeMeta :: [Inline] -> [[Inline]] -> [Inline] -> Meta
- renderTags' :: [Tag String] -> String
- inDirectory :: FilePath -> IO a -> IO a
- getDefaultReferenceDocx :: Maybe FilePath -> IO Archive
- getDefaultReferenceODT :: Maybe FilePath -> IO Archive
- readDataFile :: Maybe FilePath -> FilePath -> IO ByteString
- readDataFileUTF8 :: Maybe FilePath -> FilePath -> IO String
- fetchItem :: Maybe String -> String -> IO (Either SomeException (ByteString, Maybe MimeType))
- fetchItem' :: MediaBag -> Maybe String -> String -> IO (Either SomeException (ByteString, Maybe MimeType))
- openURL :: String -> IO (Either SomeException (ByteString, Maybe MimeType))
- collapseFilePath :: FilePath -> FilePath
- err :: Int -> String -> IO a
- warn :: String -> IO ()
- mapLeft :: (a -> b) -> Either a c -> Either b c
- hush :: Either a b -> Maybe b
- safeRead :: (MonadPlus m, Read a) => String -> m a
- withTempDir :: String -> (FilePath -> IO a) -> IO a
- pandocVersion :: String

# List processing

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

Split list by groups of one or more sep.

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

splitStringByIndices :: [Int] -> [Char] -> [[Char]]

Split string into chunks divided at specified indices.

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

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

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

# Text processing

backslashEscapes

Arguments

:: [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

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

stripTrailingNewlines :: String -> String

Strip trailing newlines from string.

trim :: String -> String

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

triml :: String -> String

Remove leading space (including newlines) from string.

trimr :: String -> String

Remove trailing space (including newlines) from string.

stripFirstAndLast :: String -> String

Strip leading and trailing characters from string

camelCaseToHyphenated :: String -> String

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

toRomanNumeral :: Int -> String

Convert number < 4000 to uppercase roman numeral.

escapeURI :: String -> String

Escape whitespace and some punctuation characters in URI.

tabFilter

Arguments

:: 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.

# Date/time

normalizeDate :: String -> Maybe String

Parse a date and convert (if possible) to YYYY-MM-DD format.

# Pandoc block and inline list processing

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

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

normalizeSpaces :: [Inline] -> [Inline]

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

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.

normalize :: Pandoc -> Pandoc

Normalize `Pandoc` document, consolidating doubled `Space`s, combining adjacent `Str`s and `Emph`s, remove `Null`s and empty elements, etc.

normalizeInlines :: [Inline] -> [Inline]

normalizeBlocks :: [Block] -> [Block]

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

Extract inlines, removing formatting.

stringify :: Walkable Inline a => a -> String

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

:: [[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.

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. Like compactify, but operates on `Blocks` rather than `[Block]`.

compactify'DL :: [(Inlines, [Blocks])] -> [(Inlines, [Blocks])]

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

data Element

Data structure for defining hierarchical Pandoc documents

Constructors

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

Instances

Eq Element |
Data Element |
Read Element |
Show Element |
Walkable Block Element |
Walkable Inline Element |

hierarchicalize :: [Block] -> [Element]

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

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

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

isHeaderBlock :: Block -> Bool

True if block is a Header block.

headerShift :: Int -> Pandoc -> Pandoc

Shift header levels up or down.

isTightList :: [[Block]] -> Bool

Detect if a list is tight.

addMetaField :: ToMetaValue a => String -> 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.

# TagSoup HTML handling

renderTags' :: [Tag String] -> String

Render HTML tags.

# File handling

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

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

getDefaultReferenceDocx :: Maybe FilePath -> IO Archive

getDefaultReferenceODT :: Maybe FilePath -> IO Archive

readDataFile :: Maybe FilePath -> FilePath -> IO ByteString

Read file from specified user data directory or, if not found there, from Cabal data directory.

readDataFileUTF8 :: Maybe FilePath -> FilePath -> IO String

Same as `readDataFile` but returns a String instead of a ByteString.

fetchItem :: Maybe String -> String -> IO (Either SomeException (ByteString, Maybe MimeType))

Fetch an image or other item from the local filesystem or the net. Returns raw content and maybe mime type.

fetchItem' :: MediaBag -> Maybe String -> String -> IO (Either SomeException (ByteString, Maybe MimeType))

Like `fetchItem`, but also looks for items in a `MediaBag`.

openURL :: String -> IO (Either SomeException (ByteString, Maybe MimeType))

Read from a URL and return raw data and maybe mime type.

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"

# Error handling

err :: Int -> String -> IO a

warn :: String -> IO ()

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

hush :: Either a b -> Maybe b

# Safe read

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

# Temp directory

withTempDir :: String -> (FilePath -> IO a) -> IO a

# Version

pandocVersion :: String

Version number of pandoc library.