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 ->
(Bool, [Inline]) -> Maybe (Bool, [Inline])
forall a. a -> Maybe a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (Bool
False, [Inline]
taskInlines)
B.Str Text
"[x]" : Inline
B.Space : [Inline]
taskInlines ->
(Bool, [Inline]) -> Maybe (Bool, [Inline])
forall a. a -> Maybe a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (Bool
True, [Inline]
taskInlines)
[Inline]
_ ->
Maybe (Bool, [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 =
(Block -> [(Bool, [Inline])]) -> b -> [(Bool, [Inline])]
forall c. Monoid c => (Block -> c) -> b -> c
forall a b c. (Walkable a b, Monoid c) => (a -> c) -> b -> c
W.query ((Block -> [(Bool, [Inline])]) -> b -> [(Bool, [Inline])])
-> (Block -> [(Bool, [Inline])]) -> b -> [(Bool, [Inline])]
forall a b. (a -> b) -> a -> b
$ \case
B.Plain [Inline]
is ->
Maybe (Bool, [Inline]) -> [(Bool, [Inline])]
forall a. Maybe a -> [a]
maybeToList (Maybe (Bool, [Inline]) -> [(Bool, [Inline])])
-> Maybe (Bool, [Inline]) -> [(Bool, [Inline])]
forall a b. (a -> b) -> a -> b
$ [Inline] -> Maybe (Bool, [Inline])
parseTaskFromInlines [Inline]
is
B.Para [Inline]
is ->
Maybe (Bool, [Inline]) -> [(Bool, [Inline])]
forall a. Maybe a -> [a]
maybeToList (Maybe (Bool, [Inline]) -> [(Bool, [Inline])])
-> Maybe (Bool, [Inline]) -> [(Bool, [Inline])]
forall a b. (a -> b) -> a -> b
$ [Inline] -> Maybe (Bool, [Inline])
parseTaskFromInlines [Inline]
is
Block
_ ->
[(Bool, [Inline])]
forall a. Monoid a => a
mempty