From 465c28d28e1017040a41653edb6248056f178d3b Mon Sep 17 00:00:00 2001 From: Milan Bracke <mbracke@antidot.net> Date: Thu, 24 Jun 2021 09:27:28 +0200 Subject: [PATCH] Docx reader: fix handling of empty fields Some fields only have an instrText and no content, Pandoc didn't understand these, causing other fields to be misunderstood because it seemed like a field was still open when it wasn't. --- src/Text/Pandoc/Readers/Docx/Parse.hs | 4 ++++ test/Tests/Readers/Docx.hs | 4 ++++ test/docx/empty_field.docx | Bin 0 -> 14312 bytes test/docx/empty_field.native | 7 +++++++ 4 files changed, 15 insertions(+) create mode 100644 test/docx/empty_field.docx create mode 100644 test/docx/empty_field.native diff --git a/src/Text/Pandoc/Readers/Docx/Parse.hs b/src/Text/Pandoc/Readers/Docx/Parse.hs index a97d4b3d1..0021741ed 100644 --- a/src/Text/Pandoc/Readers/Docx/Parse.hs +++ b/src/Text/Pandoc/Readers/Docx/Parse.hs @@ -844,6 +844,10 @@ elemToParPart ns element FldCharFieldInfo info : ancestors | fldCharType == "separate" -> do modify $ \st -> st {stateFldCharState = FldCharContent info [] : ancestors} return NullParPart + -- Some fields have no content, since Pandoc doesn't understand any of those fields, we can just close it. + FldCharFieldInfo _ : ancestors | fldCharType == "end" -> do + modify $ \st -> st {stateFldCharState = ancestors} + return NullParPart [FldCharContent info children] | fldCharType == "end" -> do modify $ \st -> st {stateFldCharState = []} return $ Field info $ reverse children diff --git a/test/Tests/Readers/Docx.hs b/test/Tests/Readers/Docx.hs index ea4094c82..be5b89b88 100644 --- a/test/Tests/Readers/Docx.hs +++ b/test/Tests/Readers/Docx.hs @@ -151,6 +151,10 @@ tests = [ testGroup "document" "nested fields with <w:instrText> tag" "docx/nested_instrText.docx" "docx/nested_instrText.native" + , testCompare + "empty fields with <w:instrText> tag" + "docx/empty_field.docx" + "docx/empty_field.native" , testCompare "pageref hyperlinks in <w:instrText> tag" "docx/pageref.docx" diff --git a/test/docx/empty_field.docx b/test/docx/empty_field.docx new file mode 100644 index 0000000000000000000000000000000000000000..fb3830b0dfad5d1884474de36dcab52187d53b1a GIT binary patch literal 14312 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 literal 0 HcmV?d00001 diff --git a/test/docx/empty_field.native b/test/docx/empty_field.native new file mode 100644 index 000000000..18d892454 --- /dev/null +++ b/test/docx/empty_field.native @@ -0,0 +1,7 @@ +[Para + [Str "\24076\26395\28145\20837\20102\35299\30340\35835\32773\21487\20197\21435\30475David",Space,Str "French",Space,Str "Belding\21644Kevin",Space,Str "J.",Space,Str "Mitchell\30340" + ,Link ("",[],[]) [Str "Foundations",Space,Str "of",Space,Str "Analysis,",Space,Str "2nd",Space,Str "Edition"] ("https://books.google.com/books?id=sp_Zcb9ot90C&lpg=PR4&hl=zh-CN&pg=PA19#v=onepage&q&f=true",""),Str ",\21487\20174\&19\39029\30475\36215\65292\25110D.C.",Space,Str "Goldrei\30340",Space + ,Link ("",[],[]) [Str "Classic",Space,Str "Set",Space,Str "Theory:",Space,Str "For",Space,Str "Guided",Space,Str "Independent",Space,Str "Study"] ("https://books.google.ae/books?id=dlc0DwAAQBAJ&lpg=PT29&hl=zh-CN&pg=PT26#v=onepage&q&f=true","") + ,Str "\65292\20174\31532\20108\31456\30475\36215\65292\38405\35835\26102\35201\27880\24847\26412\25991\19982\36825\20123\20070\25152\19981\21516\30340\26159\24182\27809\26377\25226\23454\25968\30475\20316\26159\26377\29702\25968\38598\30340\20998\21106\12290"] +,Para [Str "Index:"] +,Para [Str "French,",Space,Str "1"]]