module Text.Pandoc.CrossRef.Util.CustomLabels (customLabel) where
import Text.Pandoc.Definition
import Text.Pandoc.CrossRef.Util.Meta
import Control.Monad
import Data.List
import Text.Numeral.Roman
customLabel :: Meta -> String -> Int -> Maybe String
customLabel meta ref i
| refLabel <- takeWhile (/=':') ref
, Just cl <- lookupMeta (refLabel++"Labels") meta
= mkLabel i cl
| otherwise = Nothing
mkLabel :: Int -> MetaValue -> Maybe String
mkLabel i lt
| toString lt == Just "arabic"
= Nothing
| toString lt == Just "roman"
= Just $ toRoman i
| Just (startWith:_) <- join $ stripPrefix "alpha " `fmap` toString lt
= Just [[startWith..] !! (i1)]
| Just val <- join $ toString `fmap` getList (i1) lt
= Just val
| otherwise = error $ "Unknown numeration type: " ++ show lt