diff options
author | mb21 <mb21@users.noreply.github.com> | 2015-12-05 14:12:20 +0100 |
---|---|---|
committer | mb21 <mb21@users.noreply.github.com> | 2015-12-13 21:40:12 +0100 |
commit | 2060f5fe83db613f878c712378a68cb88f452669 (patch) | |
tree | 3319dd50653dfda4954560149564806b1b6fea3d /src/Text | |
parent | 30644b291b7a23c4e41b69611a8ee5c8d386c3c3 (diff) | |
download | pandoc-2060f5fe83db613f878c712378a68cb88f452669.tar.gz |
new function to extract multiple properties at once in CSS.hs
and use it in Textile reader
Diffstat (limited to 'src/Text')
-rw-r--r-- | src/Text/Pandoc/CSS.hs | 15 | ||||
-rw-r--r-- | src/Text/Pandoc/Readers/Textile.hs | 5 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/Text/Pandoc/CSS.hs b/src/Text/Pandoc/CSS.hs index 2287a5958..f479ed9d0 100644 --- a/src/Text/Pandoc/CSS.hs +++ b/src/Text/Pandoc/CSS.hs @@ -1,5 +1,6 @@ -module Text.Pandoc.CSS ( foldOrElse, - pickStyleAttrProps +module Text.Pandoc.CSS ( foldOrElse + , pickStyleAttrProps + , pickStylesToKVs ) where @@ -26,6 +27,16 @@ eitherToMaybe :: Either a b -> Maybe b eitherToMaybe (Right x) = Just x eitherToMaybe _ = Nothing +-- | takes a list of keys/properties and a CSS string and +-- returns the corresponding key-value-pairs. +pickStylesToKVs :: [String] -> String -> [(String, String)] +pickStylesToKVs props styleAttr = + case parse styleAttrParser "" styleAttr of + Left _ -> [] + Right styles -> filter (\s -> fst s `elem` props) styles + +-- | takes a list of key/property synonyms and a CSS string and maybe +-- returns the value of the first match (in order of the supplied list) pickStyleAttrProps :: [String] -> String -> Maybe String pickStyleAttrProps lookupProps styleAttr = do styles <- eitherToMaybe $ parse styleAttrParser "" styleAttr diff --git a/src/Text/Pandoc/Readers/Textile.hs b/src/Text/Pandoc/Readers/Textile.hs index 502595e0b..355285f54 100644 --- a/src/Text/Pandoc/Readers/Textile.hs +++ b/src/Text/Pandoc/Readers/Textile.hs @@ -537,11 +537,8 @@ image :: Parser [Char] ParserState Inlines image = try $ do char '!' >> notFollowedBy space (ident, cls, kvs) <- attributes - let getAtt k styles = case pickStyleAttrProps [k] styles of - Just v -> [(k, v)] - Nothing -> [] let attr = case lookup "style" kvs of - Just stls -> (ident, cls, getAtt "width" stls ++ getAtt "height" stls) + Just stls -> (ident, cls, pickStylesToKVs ["width", "height"] stls) Nothing -> (ident, cls, kvs) src <- manyTill anyChar' (lookAhead $ oneOf "!(") alt <- option "" (try $ (char '(' >> manyTill anyChar' (char ')'))) |