aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-02-26 23:40:31 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2017-02-26 23:40:31 +0100
commit99b39ffc1726a86e6a6ad45ef6b81a28b46594ef (patch)
tree6ef2a77f1bc5c0e670f209b8ba2a4ecd1c1d480d
parent092c8f7732858d378f81dd2ff1f1fe16d10746ab (diff)
downloadpandoc-99b39ffc1726a86e6a6ad45ef6b81a28b46594ef.tar.gz
RST reader: support scale and align attributes of images.
Closes #2662.
-rw-r--r--src/Text/Pandoc/Readers/RST.hs30
-rw-r--r--test/command/2662.md11
-rw-r--r--test/rst-reader.native2
3 files changed, 37 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs
index 441c573d9..f70434681 100644
--- a/src/Text/Pandoc/Readers/RST.hs
+++ b/src/Text/Pandoc/Readers/RST.hs
@@ -38,6 +38,7 @@ import Text.Pandoc.Parsing
import Text.Pandoc.Options
import Text.Pandoc.Logging
import Text.Pandoc.Error
+import Text.Pandoc.ImageSize (lengthToDim, scaleDimension)
import Control.Monad ( when, liftM, guard, mzero )
import Data.List ( findIndex, intercalate, isInfixOf,
transpose, sort, deleteFirstsBy, isSuffixOf , nub, union)
@@ -624,12 +625,31 @@ directive' = do
body <- option "" $ try $ blanklines >> indentedBlock
optional blanklines
let body' = body ++ "\n\n"
- imgAttr cl = ("", classes, getAtt "width" ++ getAtt "height")
+ imgAttr cl = ("", classes, widthAttr ++ heightAttr)
where
- classes = words $ maybe "" trim $ lookup cl fields
- getAtt k = case lookup k fields of
- Just v -> [(k, filter (not . isSpace) v)]
- Nothing -> []
+ classes = words $ maybe "" trim (lookup cl fields) ++
+ maybe "" (\x -> "align-" ++ trim x)
+ (lookup "align" fields)
+ scale = case trim <$> lookup "scale" fields of
+ Just v -> case reverse v of
+ '%':vv ->
+ case safeRead (reverse vv) of
+ Just (percent :: Double)
+ -> percent / 100.0
+ Nothing -> 1.0
+ _ ->
+ case safeRead v of
+ Just (s :: Double) -> s
+ Nothing -> 1.0
+ Nothing -> 1.0
+ widthAttr = maybe [] (\x -> [("width",
+ show $ scaleDimension scale x)])
+ $ lookup "width" fields >>=
+ (lengthToDim . filter (not . isSpace))
+ heightAttr = maybe [] (\x -> [("height",
+ show $ scaleDimension scale x)])
+ $ lookup "height" fields >>=
+ (lengthToDim . filter (not . isSpace))
case label of
"table" -> tableDirective top fields body'
"line-block" -> lineBlockDirective body'
diff --git a/test/command/2662.md b/test/command/2662.md
new file mode 100644
index 000000000..543209053
--- /dev/null
+++ b/test/command/2662.md
@@ -0,0 +1,11 @@
+```
+% pandoc -t html -f rst --wrap=none
+.. image:: http://url.to.image/foo.png
+ :align: left
+ :height: 100px
+ :width: 200 px
+ :scale: 300 %
+ :alt: alternate text
+^D
+<p><img src="http://url.to.image/foo.png" alt="alternate text" class="align-left" width="600" height="300" /></p>
+```
diff --git a/test/rst-reader.native b/test/rst-reader.native
index bc4641a3f..724c23b03 100644
--- a/test/rst-reader.native
+++ b/test/rst-reader.native
@@ -223,7 +223,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
,Header 1 ("images",[],[]) [Str "Images"]
,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"]
,Para [Image ("",[],[]) [Str "image"] ("lalune.jpg","")]
-,Para [Image ("",[],[("height","2343")]) [Str "Voyage dans la Lune"] ("lalune.jpg","")]
+,Para [Image ("",[],[("height","2343px")]) [Str "Voyage dans la Lune"] ("lalune.jpg","")]
,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image ("",[],[]) [Str "movie"] ("movie.jpg",""),Space,Str "icon."]
,Para [Str "And",Space,Str "an",Space,Link ("",[],[]) [Image ("",[],[]) [Str "A movie"] ("movie.jpg","")] ("/url",""),Str "."]
,Header 1 ("comments",[],[]) [Str "Comments"]