flashblast-0.0.4.0: src/FlashBlast/ClozeParse.hs
module FlashBlast.ClozeParse where
import Replace.Megaparsec
import RIO hiding (many)
import RIO.State
import qualified RIO.Text as T
import Text.Megaparsec hiding (State)
import Text.Megaparsec.Char
bracevar :: ParsecT Void Text m Text
bracevar = between (string "{{") (string "}}") (T.pack <$> many (alphaNumChar <|> spaceChar <|> char '\'' <|> char '-' <|> char ','))
addClozeNumbers :: Text -> State Int Text
addClozeNumbers x = do
i <- get
let i' = i+1
put i'
pure $ "{{c" <> T.pack (show i') <> "::" <> x <> "}}"
genClozePhrase :: Text -> (Text, [Text])
genClozePhrase x = ( flip evalState 0 . streamEditT bracevar addClozeNumbers $ x
, fmap snd . rights . splitCap (match bracevar) $ x)