{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Pandoc.Readers.Org.Meta
( metaExport
, metaKey
, metaLine
) where
import Text.Pandoc.Readers.Org.BlockStarts
import Text.Pandoc.Readers.Org.ExportSettings (exportSettings)
import Text.Pandoc.Readers.Org.Inlines
import Text.Pandoc.Readers.Org.ParserState
import Text.Pandoc.Readers.Org.Parsing
import Text.Pandoc.Builder (Blocks, Inlines)
import qualified Text.Pandoc.Builder as B
import Text.Pandoc.Class.PandocMonad (PandocMonad)
import Text.Pandoc.Definition
import Text.Pandoc.Shared (blocksToInlines, safeRead)
import Text.Pandoc.URI (urlEncode)
import Control.Monad (mzero, void)
import Data.List (intercalate, intersperse)
import Data.Map (Map)
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Data.Text as T
metaExport :: Monad m => OrgParser m (F Meta)
metaExport :: forall (m :: * -> *). Monad m => OrgParser m (F Meta)
metaExport = do
OrgParserState
st <- ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) OrgParserState
forall (m :: * -> *) s u. Monad m => ParsecT s u m u
getState
let settings :: ExportSettings
settings = OrgParserState -> ExportSettings
orgStateExportSettings OrgParserState
st
F Meta -> OrgParser m (F Meta)
forall a.
a -> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (m :: * -> *) a. Monad m => a -> m a
return (F Meta -> OrgParser m (F Meta)) -> F Meta -> OrgParser m (F Meta)
forall a b. (a -> b) -> a -> b
$ (if ExportSettings -> Bool
exportWithAuthor ExportSettings
settings then Meta -> Meta
forall a. a -> a
id else Text -> Meta -> Meta
removeMeta Text
"author")
(Meta -> Meta) -> (Meta -> Meta) -> Meta -> Meta
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (if ExportSettings -> Bool
exportWithCreator ExportSettings
settings then Meta -> Meta
forall a. a -> a
id else Text -> Meta -> Meta
removeMeta Text
"creator")
(Meta -> Meta) -> (Meta -> Meta) -> Meta -> Meta
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (if ExportSettings -> Bool
exportWithEmail ExportSettings
settings then Meta -> Meta
forall a. a -> a
id else Text -> Meta -> Meta
removeMeta Text
"email")
(Meta -> Meta) -> F Meta -> F Meta
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> OrgParserState -> F Meta
orgStateMeta OrgParserState
st
removeMeta :: Text -> Meta -> Meta
removeMeta :: Text -> Meta -> Meta
removeMeta Text
key Meta
meta' =
let metaMap :: Map Text MetaValue
metaMap = Meta -> Map Text MetaValue
unMeta Meta
meta'
in Map Text MetaValue -> Meta
Meta (Map Text MetaValue -> Meta) -> Map Text MetaValue -> Meta
forall a b. (a -> b) -> a -> b
$ Text -> Map Text MetaValue -> Map Text MetaValue
forall k a. Ord k => k -> Map k a -> Map k a
Map.delete Text
key Map Text MetaValue
metaMap
metaLine :: PandocMonad m => OrgParser m Blocks
metaLine :: forall (m :: * -> *). PandocMonad m => OrgParser m Blocks
metaLine = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Blocks
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Blocks
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Blocks
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) Blocks)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Blocks
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Blocks
forall a b. (a -> b) -> a -> b
$ Blocks
forall a. Monoid a => a
mempty Blocks
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Blocks
forall a b.
a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall (m :: * -> *). Monad m => OrgParser m ()
metaLineStart ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Blocks
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Blocks
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall (m :: * -> *). PandocMonad m => OrgParser m ()
keywordLine
keywordLine :: PandocMonad m => OrgParser m ()
keywordLine :: forall (m :: * -> *). PandocMonad m => OrgParser m ()
keywordLine = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall a b. (a -> b) -> a -> b
$ do
Text
key <- Text -> Text
T.toLower (Text -> Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
metaKey
case Text
-> Map
Text (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
-> Maybe
(ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup Text
key Map
Text (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
forall (m :: * -> *). PandocMonad m => Map Text (OrgParser m ())
keywordHandlers of
Maybe
(ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
Nothing -> [Char]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall a.
[Char]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
-> [Char]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall a b. (a -> b) -> a -> b
$ [Char]
"Unknown keyword: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Text -> [Char]
T.unpack Text
key
Just ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
hd -> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
hd
metaKey :: Monad m => OrgParser m Text
metaKey :: forall (m :: * -> *). Monad m => OrgParser m Text
metaKey = Text -> Text
T.toLower (Text -> Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall s (m :: * -> *) t st.
Stream s m t =>
ParsecT s st m Char -> ParsecT s st m Text
many1Char ([Char]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
[Char] -> ParsecT s u m Char
noneOf [Char]
": \n\r")
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
Char -> ParsecT s u m Char
char Char
':'
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m ()
skipSpaces
infix 0 ~~>
(~~>) :: a -> b -> (a, b)
a
a ~~> :: forall a b. a -> b -> (a, b)
~~> b
b = (a
a, b
b)
keywordHandlers :: PandocMonad m => Map Text (OrgParser m ())
keywordHandlers :: forall (m :: * -> *). PandocMonad m => Map Text (OrgParser m ())
keywordHandlers = [(Text, OrgParser m ())] -> Map Text (OrgParser m ())
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
[ Text
"author" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
collectLines Text
"author"
, Text
"bibliography" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> (Text -> F Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
forall a b.
(a -> b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> F Text
forall a. a -> Future OrgParserState a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
-> (Text -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Text -> Meta -> Meta
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
collectAsList Text
"bibliography"
, Text
"creator" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> (Text -> F Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
forall a b.
(a -> b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> F Text
forall a. a -> Future OrgParserState a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
-> (Text -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Text -> Meta -> Meta
forall a b. (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
B.setMeta Text
"creator"
, Text
"date" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
forall a b. (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
B.setMeta Text
"date"
, Text
"description" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
collectLines Text
"description"
, Text
"email" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> (Text -> F Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
forall a b.
(a -> b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> F Text
forall a. a -> Future OrgParserState a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
-> (Text -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Text -> Meta -> Meta
forall a b. (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
B.setMeta Text
"email"
, Text
"exclude_tags" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m [Tag]
forall (m :: * -> *). Monad m => OrgParser m [Tag]
tagList OrgParser m [Tag] -> ([Tag] -> OrgParser m ()) -> OrgParser m ()
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> (a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState) -> OrgParser m ())
-> ([Tag] -> OrgParserState -> OrgParserState)
-> [Tag]
-> OrgParser m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> OrgParserState -> OrgParserState
setExcludedTags
, Text
"header-includes" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~>
OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
collectLines Text
"header-includes"
, Text
"html_head" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~>
Text -> OrgParser m (F Inlines)
forall (m :: * -> *). Monad m => Text -> OrgParser m (F Inlines)
metaExportSnippet Text
"html" OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
collectAsList Text
"header-includes"
, Text
"html_head_extra" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~>
Text -> OrgParser m (F Inlines)
forall (m :: * -> *). Monad m => Text -> OrgParser m (F Inlines)
metaExportSnippet Text
"html" OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
collectAsList Text
"header-includes"
, Text
"institute" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
collectLines Text
"institute"
, Text
"keywords" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
collectLines Text
"keywords"
, Text
"language" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> (Text -> F Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
forall a b.
(a -> b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> F Text
forall a. a -> Future OrgParserState a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
-> (Text -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Text -> Meta -> Meta
forall a b. (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
B.setMeta Text
"lang"
, Text
"latex_class" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> (Text -> F Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
forall a b.
(a -> b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> F Text
forall a. a -> Future OrgParserState a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
-> (Text -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Text -> Meta -> Meta
forall a b. (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
B.setMeta Text
"documentclass"
, Text
"latex_class_options" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~>
(Text -> F Text
forall a. a -> Future OrgParserState a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> F Text) -> (Text -> Text) -> Text -> F Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> Text -> Text
T.filter (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` ([Char]
"[]" :: String)) (Text -> F Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine)
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) (F Text)
-> (Text -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Text -> Meta -> Meta
forall a b. (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
B.setMeta Text
"classoption"
, Text
"latex_header" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~>
Text -> OrgParser m (F Inlines)
forall (m :: * -> *). Monad m => Text -> OrgParser m (F Inlines)
metaExportSnippet Text
"latex" OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
collectAsList Text
"header-includes"
, Text
"latex_header_extra" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~>
Text -> OrgParser m (F Inlines)
forall (m :: * -> *). Monad m => Text -> OrgParser m (F Inlines)
metaExportSnippet Text
"latex" OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
collectAsList Text
"header-includes"
, Text
"link" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m ()
forall (m :: * -> *). Monad m => OrgParser m ()
addLinkFormatter
, Text
"macro" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (Text, [Text] -> Text)
forall (m :: * -> *). Monad m => OrgParser m (Text, [Text] -> Text)
macroDefinition OrgParser m (Text, [Text] -> Text)
-> ((Text, [Text] -> Text) -> OrgParser m ()) -> OrgParser m ()
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> (a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState) -> OrgParser m ())
-> ((Text, [Text] -> Text) -> OrgParserState -> OrgParserState)
-> (Text, [Text] -> Text)
-> OrgParser m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text, [Text] -> Text) -> OrgParserState -> OrgParserState
registerMacro
, Text
"nocite" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
collectLines Text
"nocite"
, Text
"options" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m ()
forall (m :: * -> *). PandocMonad m => OrgParser m ()
exportSettings
, Text
"pandoc-emphasis-post" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (Maybe [Char])
forall (m :: * -> *). Monad m => OrgParser m (Maybe [Char])
emphChars OrgParser m (Maybe [Char])
-> (Maybe [Char] -> OrgParser m ()) -> OrgParser m ()
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> (a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState) -> OrgParser m ())
-> (Maybe [Char] -> OrgParserState -> OrgParserState)
-> Maybe [Char]
-> OrgParser m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe [Char] -> OrgParserState -> OrgParserState
setEmphasisPostChar
, Text
"pandoc-emphasis-pre" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (Maybe [Char])
forall (m :: * -> *). Monad m => OrgParser m (Maybe [Char])
emphChars OrgParser m (Maybe [Char])
-> (Maybe [Char] -> OrgParser m ()) -> OrgParser m ()
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> (a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState) -> OrgParser m ())
-> (Maybe [Char] -> OrgParserState -> OrgParserState)
-> Maybe [Char]
-> OrgParser m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe [Char] -> OrgParserState -> OrgParserState
setEmphasisPreChar
, Text
"result" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> OrgParser m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine
, Text
"select_tags" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m [Tag]
forall (m :: * -> *). Monad m => OrgParser m [Tag]
tagList OrgParser m [Tag] -> ([Tag] -> OrgParser m ()) -> OrgParser m ()
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> (a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState) -> OrgParser m ())
-> ([Tag] -> OrgParserState -> OrgParserState)
-> [Tag]
-> OrgParser m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> OrgParserState -> OrgParserState
setSelectedTags
, Text
"seq_todo" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m TodoSequence
forall (m :: * -> *). Monad m => OrgParser m TodoSequence
todoSequence OrgParser m TodoSequence
-> (TodoSequence -> OrgParser m ()) -> OrgParser m ()
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> (a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState) -> OrgParser m ())
-> (TodoSequence -> OrgParserState -> OrgParserState)
-> TodoSequence
-> OrgParser m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TodoSequence -> OrgParserState -> OrgParserState
registerTodoSequence
, Text
"subtitle" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
collectLines Text
"subtitle"
, Text
"title" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines OrgParser m (F Inlines)
-> (Inlines -> Meta -> Meta) -> OrgParser m ()
forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
`parseThen` Text -> Inlines -> Meta -> Meta
collectLines Text
"title"
, Text
"todo" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m TodoSequence
forall (m :: * -> *). Monad m => OrgParser m TodoSequence
todoSequence OrgParser m TodoSequence
-> (TodoSequence -> OrgParser m ()) -> OrgParser m ()
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> (a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState) -> OrgParser m ())
-> (TodoSequence -> OrgParserState -> OrgParserState)
-> TodoSequence
-> OrgParser m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TodoSequence -> OrgParserState -> OrgParserState
registerTodoSequence
, Text
"typ_todo" Text -> OrgParser m () -> (Text, OrgParser m ())
forall a b. a -> b -> (a, b)
~~> OrgParser m TodoSequence
forall (m :: * -> *). Monad m => OrgParser m TodoSequence
todoSequence OrgParser m TodoSequence
-> (TodoSequence -> OrgParser m ()) -> OrgParser m ()
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> (a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState) -> OrgParser m ())
-> (TodoSequence -> OrgParserState -> OrgParserState)
-> TodoSequence
-> OrgParser m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TodoSequence -> OrgParserState -> OrgParserState
registerTodoSequence
]
parseThen :: PandocMonad m
=> OrgParser m (F a)
-> (a -> Meta -> Meta)
-> OrgParser m ()
parseThen :: forall (m :: * -> *) a.
PandocMonad m =>
OrgParser m (F a) -> (a -> Meta -> Meta) -> OrgParser m ()
parseThen OrgParser m (F a)
p a -> Meta -> Meta
modMeta = do
F a
value <- OrgParser m (F a)
p
F Meta
meta <- OrgParserState -> F Meta
orgStateMeta (OrgParserState -> F Meta)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) OrgParserState
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (F Meta)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) OrgParserState
forall (m :: * -> *) s u. Monad m => ParsecT s u m u
getState
(OrgParserState -> OrgParserState) -> OrgParser m ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState (\OrgParserState
st -> OrgParserState
st { orgStateMeta = modMeta <$> value <*> meta })
collectLines :: Text -> Inlines -> Meta -> Meta
collectLines :: Text -> Inlines -> Meta -> Meta
collectLines Text
key Inlines
value Meta
meta =
let value' :: MetaValue
value' = Meta -> [Inline] -> MetaValue
appendValue Meta
meta (Inlines -> [Inline]
forall a. Many a -> [a]
B.toList Inlines
value)
in Text -> MetaValue -> Meta -> Meta
forall a b. (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
B.setMeta Text
key MetaValue
value' Meta
meta
where
appendValue :: Meta -> [Inline] -> MetaValue
appendValue :: Meta -> [Inline] -> MetaValue
appendValue Meta
m [Inline]
v = [Inline] -> MetaValue
MetaInlines ([Inline] -> MetaValue) -> [Inline] -> MetaValue
forall a b. (a -> b) -> a -> b
$ Meta -> [Inline]
curInlines Meta
m [Inline] -> [Inline] -> [Inline]
forall a. Semigroup a => a -> a -> a
<> [Inline]
v
curInlines :: Meta -> [Inline]
curInlines Meta
m = case MetaValue -> [Inline]
collectInlines (MetaValue -> [Inline]) -> Maybe MetaValue -> Maybe [Inline]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Meta -> Maybe MetaValue
lookupMeta Text
key Meta
m of
Maybe [Inline]
Nothing -> []
Just [] -> []
Just [Inline]
xs -> [Inline]
xs [Inline] -> [Inline] -> [Inline]
forall a. Semigroup a => a -> a -> a
<> [Inline
B.SoftBreak]
collectInlines :: MetaValue -> [Inline]
collectInlines :: MetaValue -> [Inline]
collectInlines = \case
MetaInlines [Inline]
inlns -> [Inline]
inlns
MetaList [MetaValue]
ml -> [Inline] -> [[Inline]] -> [Inline]
forall a. [a] -> [[a]] -> [a]
intercalate [Inline
B.SoftBreak] ([[Inline]] -> [Inline]) -> [[Inline]] -> [Inline]
forall a b. (a -> b) -> a -> b
$ (MetaValue -> [Inline]) -> [MetaValue] -> [[Inline]]
forall a b. (a -> b) -> [a] -> [b]
map MetaValue -> [Inline]
collectInlines [MetaValue]
ml
MetaString Text
s -> [Text -> Inline
B.Str Text
s]
MetaBlocks [Block]
blks -> [Block] -> [Inline]
blocksToInlines [Block]
blks
MetaMap Map Text MetaValue
_map -> []
MetaBool Bool
_bool -> []
collectAsList :: B.ToMetaValue a => Text -> a -> Meta -> Meta
collectAsList :: forall a. ToMetaValue a => Text -> a -> Meta -> Meta
collectAsList Text
key a
value Meta
meta =
let value' :: MetaValue
value' = Meta -> MetaValue -> MetaValue
metaListAppend Meta
meta (a -> MetaValue
forall a. ToMetaValue a => a -> MetaValue
B.toMetaValue a
value)
in Text -> MetaValue -> Meta -> Meta
forall a b. (HasMeta a, ToMetaValue b) => Text -> b -> a -> a
forall a. ToMetaValue a => Text -> a -> Meta -> Meta
B.setMeta Text
key MetaValue
value' Meta
meta
where
metaListAppend :: Meta -> MetaValue -> MetaValue
metaListAppend Meta
m MetaValue
v = [MetaValue] -> MetaValue
MetaList (Meta -> [MetaValue]
curList Meta
m [MetaValue] -> [MetaValue] -> [MetaValue]
forall a. [a] -> [a] -> [a]
++ [MetaValue
v])
curList :: Meta -> [MetaValue]
curList Meta
m = case Text -> Meta -> Maybe MetaValue
lookupMeta Text
key Meta
m of
Just (MetaList [MetaValue]
ms) -> [MetaValue]
ms
Just MetaValue
x -> [MetaValue
x]
Maybe MetaValue
_ -> []
metaExportSnippet :: Monad m => Text -> OrgParser m (F Inlines)
metaExportSnippet :: forall (m :: * -> *). Monad m => Text -> OrgParser m (F Inlines)
metaExportSnippet Text
format = Inlines -> F Inlines
forall a. a -> Future OrgParserState a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Inlines -> F Inlines) -> (Text -> Inlines) -> Text -> F Inlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text -> Inlines
B.rawInline Text
format (Text -> F Inlines)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (F Inlines)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine
addLinkFormatter :: Monad m => OrgParser m ()
addLinkFormatter :: forall (m :: * -> *). Monad m => OrgParser m ()
addLinkFormatter = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall a b. (a -> b) -> a -> b
$ do
Text
linkType <- Char -> Text -> Text
T.cons (Char -> Text -> Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s u m Char
letter ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) (a -> b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall s (m :: * -> *) t st.
Stream s m t =>
ParsecT s st m Char -> ParsecT s st m Text
manyChar (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s u m Char
alphaNum ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> [Char]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
[Char] -> ParsecT s u m Char
oneOf [Char]
"-_") ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m ()
skipSpaces
Text -> Text
formatter <- ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall (m :: * -> *). Monad m => OrgParser m (Text -> Text)
parseFormat
(OrgParserState -> OrgParserState)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall (m :: * -> *) u s. Monad m => (u -> u) -> ParsecT s u m ()
updateState ((OrgParserState -> OrgParserState)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
-> (OrgParserState -> OrgParserState)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall a b. (a -> b) -> a -> b
$ \OrgParserState
s ->
let fs :: OrgLinkFormatters
fs = OrgParserState -> OrgLinkFormatters
orgStateLinkFormatters OrgParserState
s
in OrgParserState
s{ orgStateLinkFormatters = Map.insert linkType formatter fs }
parseFormat :: Monad m => OrgParser m (Text -> Text)
parseFormat :: forall (m :: * -> *). Monad m => OrgParser m (Text -> Text)
parseFormat = ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text))
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall a b. (a -> b) -> a -> b
$ ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall {u}.
ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
replacePlain ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall {u}.
ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
replaceUrl ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Text -> Text)
forall {u}.
ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
justAppend
where
replacePlain :: ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
replacePlain = ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text))
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall a b. (a -> b) -> a -> b
$ (\[Text]
x -> [Text] -> Text
T.concat ([Text] -> Text) -> (Text -> [Text]) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> [Text] -> [Text]) -> [Text] -> Text -> [Text]
forall a b c. (a -> b -> c) -> b -> a -> c
flip Text -> [Text] -> [Text]
forall a. a -> [a] -> [a]
intersperse [Text]
x)
([Text] -> Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) [Text]
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ParsecT Sources u (ReaderT OrgParserLocal m) Text]
-> ParsecT Sources u (ReaderT OrgParserLocal m) [Text]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [Char -> ParsecT Sources u (ReaderT OrgParserLocal m) Text
forall {m :: * -> *} {s} {st}.
(Stream s m Char, UpdateSourcePos s Char) =>
Char -> ParsecT s st m Text
tillSpecifier Char
's', ParsecT Sources u (ReaderT OrgParserLocal m) Text
forall {st}. ParsecT Sources st (ReaderT OrgParserLocal m) Text
rest]
replaceUrl :: ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
replaceUrl = ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text))
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall a b. (a -> b) -> a -> b
$ (\[Text]
x -> [Text] -> Text
T.concat ([Text] -> Text) -> (Text -> [Text]) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> [Text] -> [Text]) -> [Text] -> Text -> [Text]
forall a b c. (a -> b -> c) -> b -> a -> c
flip Text -> [Text] -> [Text]
forall a. a -> [a] -> [a]
intersperse [Text]
x (Text -> [Text]) -> (Text -> Text) -> Text -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
urlEncode)
([Text] -> Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) [Text]
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ParsecT Sources u (ReaderT OrgParserLocal m) Text]
-> ParsecT Sources u (ReaderT OrgParserLocal m) [Text]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [Char -> ParsecT Sources u (ReaderT OrgParserLocal m) Text
forall {m :: * -> *} {s} {st}.
(Stream s m Char, UpdateSourcePos s Char) =>
Char -> ParsecT s st m Text
tillSpecifier Char
'h', ParsecT Sources u (ReaderT OrgParserLocal m) Text
forall {st}. ParsecT Sources st (ReaderT OrgParserLocal m) Text
rest]
justAppend :: ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
justAppend = ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text))
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
(<>) (Text -> Text -> Text)
-> ParsecT Sources u (ReaderT OrgParserLocal m) Text
-> ParsecT Sources u (ReaderT OrgParserLocal m) (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources u (ReaderT OrgParserLocal m) Text
forall {st}. ParsecT Sources st (ReaderT OrgParserLocal m) Text
rest
rest :: ParsecT Sources st (ReaderT OrgParserLocal m) Text
rest = ParsecT Sources st (ReaderT OrgParserLocal m) Char
-> ParsecT Sources st (ReaderT OrgParserLocal m) ()
-> ParsecT Sources st (ReaderT OrgParserLocal m) Text
forall s (m :: * -> *) t st a.
Stream s m t =>
ParsecT s st m Char -> ParsecT s st m a -> ParsecT s st m Text
manyTillChar ParsecT Sources st (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s u m Char
anyChar (ParsecT Sources st (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof ParsecT Sources st (ReaderT OrgParserLocal m) ()
-> ParsecT Sources st (ReaderT OrgParserLocal m) ()
-> ParsecT Sources st (ReaderT OrgParserLocal m) ()
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> () ()
-> ParsecT Sources st (ReaderT OrgParserLocal m) Char
-> ParsecT Sources st (ReaderT OrgParserLocal m) ()
forall a b.
a
-> ParsecT Sources st (ReaderT OrgParserLocal m) b
-> ParsecT Sources st (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ [Char] -> ParsecT Sources st (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
[Char] -> ParsecT s u m Char
oneOf [Char]
"\n\r")
tillSpecifier :: Char -> ParsecT s st m Text
tillSpecifier Char
c = ParsecT s st m Char -> ParsecT s st m [Char] -> ParsecT s st m Text
forall s (m :: * -> *) t st a.
Stream s m t =>
ParsecT s st m Char -> ParsecT s st m a -> ParsecT s st m Text
manyTillChar ([Char] -> ParsecT s st m Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
[Char] -> ParsecT s u m Char
noneOf [Char]
"\n\r") (ParsecT s st m [Char] -> ParsecT s st m [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT s st m [Char] -> ParsecT s st m [Char])
-> ParsecT s st m [Char] -> ParsecT s st m [Char]
forall a b. (a -> b) -> a -> b
$ [Char] -> ParsecT s st m [Char]
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
[Char] -> ParsecT s u m [Char]
string (Char
'%'Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
cChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
""))
tagList :: Monad m => OrgParser m [Tag]
tagList :: forall (m :: * -> *). Monad m => OrgParser m [Tag]
tagList = do
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m ()
skipSpaces
(Text -> Tag) -> [Text] -> [Tag]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Tag
Tag ([Text] -> [Tag])
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
-> OrgParser m [Tag]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
orgTagWord ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m ()
skipSpaces) OrgParser m [Tag]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> OrgParser m [Tag]
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *). Monad m => OrgParser m Char
newline
setExcludedTags :: [Tag] -> OrgParserState -> OrgParserState
setExcludedTags :: [Tag] -> OrgParserState -> OrgParserState
setExcludedTags [Tag]
tags OrgParserState
st =
let finalSet :: Set Tag
finalSet = if OrgParserState -> Bool
orgStateExcludeTagsChanged OrgParserState
st
then (Tag -> Set Tag -> Set Tag) -> Set Tag -> [Tag] -> Set Tag
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr Tag -> Set Tag -> Set Tag
forall a. Ord a => a -> Set a -> Set a
Set.insert (OrgParserState -> Set Tag
orgStateExcludeTags OrgParserState
st) [Tag]
tags
else [Tag] -> Set Tag
forall a. Ord a => [a] -> Set a
Set.fromList [Tag]
tags
in OrgParserState
st { orgStateExcludeTags = finalSet, orgStateExcludeTagsChanged = True }
setSelectedTags :: [Tag] -> OrgParserState -> OrgParserState
setSelectedTags :: [Tag] -> OrgParserState -> OrgParserState
setSelectedTags [Tag]
tags OrgParserState
st =
let finalSet :: Set Tag
finalSet = if OrgParserState -> Bool
orgStateSelectTagsChanged OrgParserState
st
then (Tag -> Set Tag -> Set Tag) -> Set Tag -> [Tag] -> Set Tag
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr Tag -> Set Tag -> Set Tag
forall a. Ord a => a -> Set a -> Set a
Set.insert (OrgParserState -> Set Tag
orgStateSelectTags OrgParserState
st) [Tag]
tags
else [Tag] -> Set Tag
forall a. Ord a => [a] -> Set a
Set.fromList [Tag]
tags
in OrgParserState
st { orgStateSelectTags = finalSet, orgStateSelectTagsChanged = True }
setEmphasisPreChar :: Maybe [Char] -> OrgParserState -> OrgParserState
setEmphasisPreChar :: Maybe [Char] -> OrgParserState -> OrgParserState
setEmphasisPreChar Maybe [Char]
csMb OrgParserState
st =
let preChars :: [Char]
preChars = [Char] -> Maybe [Char] -> [Char]
forall a. a -> Maybe a -> a
fromMaybe (OrgParserState -> [Char]
orgStateEmphasisPreChars OrgParserState
defaultOrgParserState) Maybe [Char]
csMb
in OrgParserState
st { orgStateEmphasisPreChars = preChars }
setEmphasisPostChar :: Maybe [Char] -> OrgParserState -> OrgParserState
setEmphasisPostChar :: Maybe [Char] -> OrgParserState -> OrgParserState
setEmphasisPostChar Maybe [Char]
csMb OrgParserState
st =
let postChars :: [Char]
postChars = [Char] -> Maybe [Char] -> [Char]
forall a. a -> Maybe a -> a
fromMaybe (OrgParserState -> [Char]
orgStateEmphasisPostChars OrgParserState
defaultOrgParserState) Maybe [Char]
csMb
in OrgParserState
st { orgStateEmphasisPostChars = postChars }
emphChars :: Monad m => OrgParser m (Maybe [Char])
emphChars :: forall (m :: * -> *). Monad m => OrgParser m (Maybe [Char])
emphChars = do
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m ()
skipSpaces
Text -> Maybe [Char]
forall (m :: * -> *) a. (MonadPlus m, Read a) => Text -> m a
safeRead (Text -> Maybe [Char])
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> OrgParser m (Maybe [Char])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
anyLine
lineOfInlines :: PandocMonad m => OrgParser m (F Inlines)
lineOfInlines :: forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
lineOfInlines = do
OrgParser m ()
forall (m :: * -> *). Monad m => OrgParser m ()
updateLastPreCharPos
F Inlines -> F Inlines
forall s. Future s Inlines -> Future s Inlines
trimInlinesF (F Inlines -> F Inlines)
-> ([F Inlines] -> F Inlines) -> [F Inlines] -> F Inlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [F Inlines] -> F Inlines
forall a. Monoid a => [a] -> a
mconcat ([F Inlines] -> F Inlines)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) [F Inlines]
-> OrgParser m (F Inlines)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> OrgParser m (F Inlines)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) [F Inlines]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill OrgParser m (F Inlines)
forall (m :: * -> *). PandocMonad m => OrgParser m (F Inlines)
inline ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *). Monad m => OrgParser m Char
newline
todoSequence :: Monad m => OrgParser m TodoSequence
todoSequence :: forall (m :: * -> *). Monad m => OrgParser m TodoSequence
todoSequence = ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
forall a b. (a -> b) -> a -> b
$ do
[Text]
todoKws <- OrgParser m [Text]
forall (m :: * -> *). Monad m => OrgParser m [Text]
todoKeywords
Maybe [Text]
doneKws <- OrgParser m [Text]
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Maybe [Text])
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m (Maybe a)
optionMaybe (OrgParser m [Text]
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Maybe [Text]))
-> OrgParser m [Text]
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Maybe [Text])
forall a b. (a -> b) -> a -> b
$ OrgParser m ()
forall (m :: * -> *). Monad m => OrgParser m ()
todoDoneSep OrgParser m () -> OrgParser m [Text] -> OrgParser m [Text]
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> OrgParser m [Text]
forall (m :: * -> *). Monad m => OrgParser m [Text]
doneKeywords
OrgParser m Char
forall (m :: * -> *). Monad m => OrgParser m Char
newline
case Maybe [Text]
doneKws of
Just [Text]
done -> TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
forall a.
a -> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (m :: * -> *) a. Monad m => a -> m a
return (TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence)
-> TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
forall a b. (a -> b) -> a -> b
$ [Text] -> [Text] -> TodoSequence
keywordsToSequence [Text]
todoKws [Text]
done
Maybe [Text]
Nothing -> case [Text] -> [Text]
forall a. [a] -> [a]
reverse [Text]
todoKws of
[] -> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
forall a.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (m :: * -> *) a. MonadPlus m => m a
mzero
(Text
x:[Text]
xs) -> TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
forall a.
a -> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (m :: * -> *) a. Monad m => a -> m a
return (TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence)
-> TodoSequence
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) TodoSequence
forall a b. (a -> b) -> a -> b
$ [Text] -> [Text] -> TodoSequence
keywordsToSequence ([Text] -> [Text]
forall a. [a] -> [a]
reverse [Text]
xs) [Text
x]
where
todoKeyword :: Monad m => OrgParser m Text
todoKeyword :: forall (m :: * -> *). Monad m => OrgParser m Text
todoKeyword = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall s (m :: * -> *) t st.
Stream s m t =>
ParsecT s st m Char -> ParsecT s st m Text
many1Char ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m Char
nonspaceChar ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m ()
skipSpaces
todoKeywords :: Monad m => OrgParser m [Text]
todoKeywords :: forall (m :: * -> *). Monad m => OrgParser m [Text]
todoKeywords = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) [Text])
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
forall a b. (a -> b) -> a -> b
$
let endOfKeywords :: ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
endOfKeywords = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall (m :: * -> *). Monad m => OrgParser m ()
todoDoneSep ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *). Monad m => OrgParser m Char
newline
in ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
todoKeyword (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
lookAhead ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
endOfKeywords)
doneKeywords :: Monad m => OrgParser m [Text]
doneKeywords :: forall (m :: * -> *). Monad m => OrgParser m [Text]
doneKeywords = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) [Text])
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
forall a b. (a -> b) -> a -> b
$
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) [Text]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
todoKeyword ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m ()
optional ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall (m :: * -> *). Monad m => OrgParser m ()
todoDoneSep) (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
lookAhead ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *). Monad m => OrgParser m Char
newline)
todoDoneSep :: Monad m => OrgParser m ()
todoDoneSep :: forall (m :: * -> *). Monad m => OrgParser m ()
todoDoneSep = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
-> (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ())
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall a b. (a -> b) -> a -> b
$ ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m ()
skipSpaces ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
Char -> ParsecT s u m Char
char Char
'|' ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall (m :: * -> *). Monad m => OrgParser m ()
skipSpaces1
keywordsToSequence :: [Text] -> [Text] -> TodoSequence
keywordsToSequence :: [Text] -> [Text] -> TodoSequence
keywordsToSequence [Text]
todo [Text]
done =
let todoMarkers :: TodoSequence
todoMarkers = (Text -> TodoMarker) -> [Text] -> TodoSequence
forall a b. (a -> b) -> [a] -> [b]
map (TodoState -> Text -> TodoMarker
TodoMarker TodoState
Todo) [Text]
todo
doneMarkers :: TodoSequence
doneMarkers = (Text -> TodoMarker) -> [Text] -> TodoSequence
forall a b. (a -> b) -> [a] -> [b]
map (TodoState -> Text -> TodoMarker
TodoMarker TodoState
Done) [Text]
done
in TodoSequence
todoMarkers TodoSequence -> TodoSequence -> TodoSequence
forall a. [a] -> [a] -> [a]
++ TodoSequence
doneMarkers
macroDefinition :: Monad m => OrgParser m (Text, [Text] -> Text)
macroDefinition :: forall (m :: * -> *). Monad m => OrgParser m (Text, [Text] -> Text)
macroDefinition = ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text, [Text] -> Text)
-> ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text, [Text] -> Text)
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text, [Text] -> Text)
-> ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text, [Text] -> Text))
-> ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text, [Text] -> Text)
-> ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text, [Text] -> Text)
forall a b. (a -> b) -> a -> b
$ do
Text
macroName <- ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall s (m :: * -> *) t st.
Stream s m t =>
ParsecT s st m Char -> ParsecT s st m Text
many1Char ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m Char
nonspaceChar ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) st.
(Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s st m ()
skipSpaces
Text
firstPart <- ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
expansionPart
([Int]
elemOrder, [Text]
parts) <- [(Int, Text)] -> ([Int], [Text])
forall a b. [(a, b)] -> ([a], [b])
unzip ([(Int, Text)] -> ([Int], [Text]))
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) [(Int, Text)]
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) ([Int], [Text])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Int, Text)
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) [(Int, Text)]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many ((,) (Int -> Text -> (Int, Text))
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
-> ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text -> (Int, Text))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
forall (m :: * -> *). Monad m => OrgParser m Int
placeholder ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text -> (Int, Text))
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT
Sources OrgParserState (ReaderT OrgParserLocal m) (Int, Text)
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) (a -> b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall (m :: * -> *). Monad m => OrgParser m Text
expansionPart)
let expander :: [Text] -> Text
expander = [Text] -> Text
forall a. Monoid a => [a] -> a
mconcat ([Text] -> Text) -> ([Text] -> [Text]) -> [Text] -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> [Text] -> [Text]
forall a. [a] -> [a] -> [a]
alternate (Text
firstPartText -> [Text] -> [Text]
forall a. a -> [a] -> [a]
:[Text]
parts) ([Text] -> [Text]) -> ([Text] -> [Text]) -> [Text] -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> [Text] -> [Text]
reorder [Int]
elemOrder
(Text, [Text] -> Text)
-> ParsecT
Sources
OrgParserState
(ReaderT OrgParserLocal m)
(Text, [Text] -> Text)
forall a.
a -> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
forall (m :: * -> *) a. Monad m => a -> m a
return (Text
macroName, [Text] -> Text
expander)
where
placeholder :: Monad m => OrgParser m Int
placeholder :: forall (m :: * -> *). Monad m => OrgParser m Int
placeholder = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int)
-> (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Int)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
forall a b.
(a -> b)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> Maybe Int -> Int
forall a. a -> Maybe a -> a
fromMaybe Int
1 (Maybe Int -> Int) -> (Text -> Maybe Int) -> Text -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Maybe Int
forall (m :: * -> *) a. (MonadPlus m, Read a) => Text -> m a
safeRead) (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
forall a b. (a -> b) -> a -> b
$ Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
Char -> ParsecT s u m Char
char Char
'$' ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall s (m :: * -> *) t st.
Stream s m t =>
ParsecT s st m Char -> ParsecT s st m Text
many1Char ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
ParsecT s u m Char
digit
expansionPart :: Monad m => OrgParser m Text
expansionPart :: forall (m :: * -> *). Monad m => OrgParser m Text
expansionPart = ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text)
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall a b. (a -> b) -> a -> b
$ ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Text
forall s (m :: * -> *) t st.
Stream s m t =>
ParsecT s st m Char -> ParsecT s st m Text
manyChar (ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Int
forall (m :: * -> *). Monad m => OrgParser m Int
placeholder ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) ()
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall a b.
ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) a
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> [Char]
-> ParsecT Sources OrgParserState (ReaderT OrgParserLocal m) Char
forall (m :: * -> *) s u.
(Monad m, Stream s m Char, UpdateSourcePos s Char) =>
[Char] -> ParsecT s u m Char
noneOf [Char]
"\n\r")
alternate :: [a] -> [a] -> [a]
alternate :: forall a. [a] -> [a] -> [a]
alternate [] [a]
ys = [a]
ys
alternate [a]
xs [] = [a]
xs
alternate (a
x:[a]
xs) (a
y:[a]
ys) = a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: a
y a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
alternate [a]
xs [a]
ys
reorder :: [Int] -> [Text] -> [Text]
reorder :: [Int] -> [Text] -> [Text]
reorder [Int]
perm [Text]
xs =
let element :: Int -> [Text]
element Int
n = Int -> [Text] -> [Text]
forall a. Int -> [a] -> [a]
take Int
1 ([Text] -> [Text]) -> [Text] -> [Text]
forall a b. (a -> b) -> a -> b
$ Int -> [Text] -> [Text]
forall a. Int -> [a] -> [a]
drop (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [Text]
xs
in (Int -> [Text]) -> [Int] -> [Text]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap Int -> [Text]
element [Int]
perm