@@ -38,6 +38,7 @@ import Text.Pandoc.Parsing
3838import Text.Pandoc.Options
3939import Text.Pandoc.Logging
4040import Text.Pandoc.Error
41+import Text.Pandoc.ImageSize (lengthToDim, scaleDimension)
4142import Control.Monad ( when, liftM, guard, mzero )
4243import Data.List ( findIndex, intercalate, isInfixOf,
4344 transpose, sort, deleteFirstsBy, isSuffixOf , nub, union)
@@ -624,12 +625,31 @@ directive' = do
624625 body <- option "" $ try $ blanklines >> indentedBlock
625626 optional blanklines
626627 let body' = body ++ "\n\n"
627− imgAttr cl = ("", classes, getAtt "width" ++ getAtt "height")
628+ imgAttr cl = ("", classes, widthAttr ++ heightAttr)
628629 where
629− classes = words $ maybe "" trim $ lookup cl fields
630− getAtt k = case lookup k fields of
631− Just v -> [(k, filter (not . isSpace) v)]
632− Nothing -> []
630+ classes = words $ maybe "" trim (lookup cl fields) ++
631+ maybe "" (\x -> "align-" ++ trim x)
632+ (lookup "align" fields)
633+ scale = case trim <$> lookup "scale" fields of
634+ Just v -> case reverse v of
635+ '%':vv ->
636+ case safeRead (reverse vv) of
637+ Just (percent :: Double)
638+ -> percent / 100.0
639+ Nothing -> 1.0
640+ _ ->
641+ case safeRead v of
642+ Just (s :: Double) -> s
643+ Nothing -> 1.0
644+ Nothing -> 1.0
645+ widthAttr = maybe [] (\x -> [("width",
646+ show $ scaleDimension scale x)])
647+ $ lookup "width" fields >>=
648+ (lengthToDim . filter (not . isSpace))
649+ heightAttr = maybe [] (\x -> [("height",
650+ show $ scaleDimension scale x)])
651+ $ lookup "height" fields >>=
652+ (lengthToDim . filter (not . isSpace))
633653 case label of
634654 "table" -> tableDirective top fields body'
635655 "line-block" -> lineBlockDirective body'