module Heist.Extra.Splices.Pandoc.TaskList (
parseTaskFromInlines,
queryTasks,
) where
import Text.Pandoc.Builder qualified as B
import Text.Pandoc.Walk qualified as W
parseTaskFromInlines :: [B.Inline] -> Maybe (Bool, [B.Inline])
parseTaskFromInlines :: [Inline] -> Maybe (Bool, [Inline])
parseTaskFromInlines = \case
B.Str Text
"[" : Inline
B.Space : B.Str Text
"]" : Inline
B.Space : [Inline]
taskInlines ->
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (Bool
False, [Inline]
taskInlines)
B.Str Text
"[x]" : Inline
B.Space : [Inline]
taskInlines ->
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (Bool
True, [Inline]
taskInlines)
[Inline]
_ ->
forall a. Maybe a
Nothing
queryTasks :: W.Walkable B.Block b => b -> [(Bool, [B.Inline])]
queryTasks :: forall b. Walkable Block b => b -> [(Bool, [Inline])]
queryTasks =
forall a b c. (Walkable a b, Monoid c) => (a -> c) -> b -> c
W.query forall a b. (a -> b) -> a -> b
$ \case
B.Plain [Inline]
is ->
forall a. Maybe a -> [a]
maybeToList forall a b. (a -> b) -> a -> b
$ [Inline] -> Maybe (Bool, [Inline])
parseTaskFromInlines [Inline]
is
B.Para [Inline]
is ->
forall a. Maybe a -> [a]
maybeToList forall a b. (a -> b) -> a -> b
$ [Inline] -> Maybe (Bool, [Inline])
parseTaskFromInlines [Inline]
is
Block
_ ->
forall a. Monoid a => a
mempty