git.iko.soy/typeable/pandoc
on 6c8a930 help sign in
32 lines 942 B history raw
1module Text.Pandoc.CSS ( foldOrElse,
2 pickStyleAttrProps
3 )
4where
6import Text.Pandoc.Shared (trim)
7import Text.Parsec
8import Text.Parsec.String
10ruleParser :: Parser (String, String)
11ruleParser = do
12 p <- many1 (noneOf ":") <* char ':'
13 v <- many1 (noneOf ":;") <* (optional $ char ';') <* spaces
14 return (trim p, trim v)
16styleAttrParser :: Parser [(String, String)]
17styleAttrParser = many1 ruleParser
19orElse :: Eq a => a -> a -> a -> a
20orElse v x y = if v == x then y else x
22foldOrElse :: Eq a => a -> [a] -> a
23foldOrElse v xs = foldr (orElse v) v xs
25eitherToMaybe :: Either a b -> Maybe b
26eitherToMaybe (Right x) = Just x
27eitherToMaybe _ = Nothing
29pickStyleAttrProps :: [String] -> String -> Maybe String
30pickStyleAttrProps lookupProps styleAttr = do
31 styles <- eitherToMaybe $ parse styleAttrParser "" styleAttr
32 foldOrElse Nothing $ map (flip lookup styles) lookupProps