aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormbrackeantidot <65160241+mbrackeantidot@users.noreply.github.com>2021-04-29 18:11:44 +0200
committerGitHub <noreply@github.com>2021-04-29 09:11:44 -0700
commitb6a65445e10d74dfe384763c37438338bd395372 (patch)
treee338590d196e65fb0f063dc4d8254cf00c19cb37
parentd14c5f94df490996d12f8a56e29f927b9f9549e8 (diff)
downloadpandoc-b6a65445e10d74dfe384763c37438338bd395372.tar.gz
Docx reader: add handling of vml image objects (jgm#4735) (#7257)
They represent images, the same way as other images in vml format.
-rw-r--r--src/Text/Pandoc/Readers/Docx/Parse.hs11
-rw-r--r--test/Tests/Readers/Docx.hs4
-rw-r--r--test/docx/image_vml_as_object.docxbin0 -> 74199 bytes
-rw-r--r--test/docx/image_vml_as_object.native2
4 files changed, 15 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Readers/Docx/Parse.hs b/src/Text/Pandoc/Readers/Docx/Parse.hs
index f8ed248d7..7325ff300 100644
--- a/src/Text/Pandoc/Readers/Docx/Parse.hs
+++ b/src/Text/Pandoc/Readers/Docx/Parse.hs
@@ -709,7 +709,8 @@ elemToParPart ns element
case drawing of
Just s -> expandDrawingId s >>= (\(fp, bs) -> return $ Drawing fp title alt bs $ elemToExtent drawingElem)
Nothing -> throwError WrongElem
--- The below is an attempt to deal with images in deprecated vml format.
+-- The two cases below are an attempt to deal with images in deprecated vml format.
+-- Todo: check out title and attr for deprecated format.
elemToParPart ns element
| isElem ns "w" "r" element
, Just _ <- findChildByName ns "w" "pict" element =
@@ -717,9 +718,15 @@ elemToParPart ns element
>>= findAttrByName ns "r" "id"
in
case drawing of
- -- Todo: check out title and attr for deprecated format.
Just s -> expandDrawingId s >>= (\(fp, bs) -> return $ Drawing fp "" "" bs Nothing)
Nothing -> throwError WrongElem
+elemToParPart ns element
+ | isElem ns "w" "r" element
+ , Just objectElem <- findChildByName ns "w" "object" element
+ , Just shapeElem <- findChildByName ns "v" "shape" objectElem
+ , Just imagedataElem <- findChildByName ns "v" "imagedata" shapeElem
+ , Just drawingId <- findAttrByName ns "r" "id" imagedataElem
+ = expandDrawingId drawingId >>= (\(fp, bs) -> return $ Drawing fp "" "" bs Nothing)
-- Chart
elemToParPart ns element
| isElem ns "w" "r" element
diff --git a/test/Tests/Readers/Docx.hs b/test/Tests/Readers/Docx.hs
index 263e04173..2cce70cc5 100644
--- a/test/Tests/Readers/Docx.hs
+++ b/test/Tests/Readers/Docx.hs
@@ -156,6 +156,10 @@ tests = [ testGroup "document"
"docx/image_vml.docx"
"docx/image_vml.native"
, testCompare
+ "VML image as object"
+ "docx/image_vml_as_object.docx"
+ "docx/image_vml_as_object.native"
+ , testCompare
"inline image in links"
"docx/inline_images.docx"
"docx/inline_images.native"
diff --git a/test/docx/image_vml_as_object.docx b/test/docx/image_vml_as_object.docx
new file mode 100644
index 000000000..7e1e4d2ca
--- /dev/null
+++ b/test/docx/image_vml_as_object.docx
Binary files differ
diff --git a/test/docx/image_vml_as_object.native b/test/docx/image_vml_as_object.native
new file mode 100644
index 000000000..6e689486a
--- /dev/null
+++ b/test/docx/image_vml_as_object.native
@@ -0,0 +1,2 @@
+[Para [Str "Test",Space,Str "with",Space,Str "object",Space,Str "as",Space,Str "image:"]
+,Para [Image ("",[],[]) [] ("media/image1.emf","")]]