packages feed

heist-extra-0.1.0.0: src/Heist/Extra/Splices/Pandoc/TaskList.hs

-- GFM Task List, https://github.github.com/gfm/#task-list-items-extension-
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 = \case
  B.Str "[" : B.Space : B.Str "]" : B.Space : taskInlines ->
    pure (False, taskInlines)
  B.Str "[x]" : B.Space : taskInlines ->
    pure (True, taskInlines)
  _ ->
    Nothing

queryTasks :: W.Walkable B.Block b => b -> [(Bool, [B.Inline])]
queryTasks =
  W.query $ \case
    B.Plain is ->
      maybeToList $ parseTaskFromInlines is
    B.Para is ->
      maybeToList $ parseTaskFromInlines is
    _ ->
      mempty