From 93e3d463fdce74a2f5399a360e4da552ec2fa039 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Mon, 24 Aug 2020 09:31:39 -0700 Subject: [PATCH] Docx writer: separate adjacent tables. Word combines adjacent tables, so to prevent this we insert an empty paragraph between two adjacent tables. Closes #4315. --- src/Text/Pandoc/Writers/Docx.hs | 10 +++++++++- test/docx/golden/tables.docx | Bin 10273 -> 10276 bytes 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Text/Pandoc/Writers/Docx.hs b/src/Text/Pandoc/Writers/Docx.hs index f448c4ce2..e738008ee 100644 --- a/src/Text/Pandoc/Writers/Docx.hs +++ b/src/Text/Pandoc/Writers/Docx.hs @@ -848,7 +848,15 @@ writeOpenXML opts (Pandoc meta blocks) = do -- | Convert a list of Pandoc blocks to OpenXML. blocksToOpenXML :: (PandocMonad m) => WriterOptions -> [Block] -> WS m [Element] -blocksToOpenXML opts bls = concat `fmap` mapM (blockToOpenXML opts) bls +blocksToOpenXML opts = fmap concat . mapM (blockToOpenXML opts) . separateTables + +-- Word combines adjacent tables unless you put an empty paragraph between +-- them. See #4315. +separateTables :: [Block] -> [Block] +separateTables [] = [] +separateTables (x@Table{}:y@Table{}:zs) = + x : RawBlock (Format "openxml") "" : separateTables (y:zs) +separateTables (x:xs) = x : separateTables xs pStyleM :: (PandocMonad m) => ParaStyleName -> WS m XML.Element pStyleM styleName = do diff --git a/test/docx/golden/tables.docx b/test/docx/golden/tables.docx index 38b4d2391b47c5c3b729ae2e08a3314f21012634..af30e1fe65fedcb1722c79dc58b2d054a4d86a8b 100644 GIT binary patch delta 1687 zcmZ8h2{@E%6#i$-hOrxyNoHKL6fz1mkq22STzAGq;+b;M%~tkC6AfA|cT_*gzDBm} z%T1OPE?F*-ytP6zl*s0CBo7NzFZ4h&0CKxtuI_BNrvVJdwY<)kx02Mke)? zqM4dY-;>%#C(G5uft;w*$JXdMOU3&4Xz7D}Dxc_d2h!-cX>5B^lCOw{{20pb}L(32R2Y@S);EF(=a9~Bk=WSxsc~R*=xcGzq5r^Rs{gH`L zdvCvG8-?kG@?=Cr+sUdRuZ#y1wyI&Z!LDPYELvb>Q5-|JDY3HtE;4uA=Jkv6xVg<=7gQ0RKxkp(rhp0j9PEFiTj5YDubeZ z&4;Hbzdu)OQC_9@4zB0+2j8d`51v&^cwS?~ig3IPyIUcS<(s;|9$)HwT^L!3ta2jh?s04Re2fC2yjY)>C&>M5U61q4|zK%glyOE5`u$db*O$`ZCg zZEz*hrkj+R3<82$AG4Yj^eSj8OW>Y+LXf;N8zd4@Emo1Ib%^Kd62nxr&dsx_QR*k| z96M|<`EJ^Lsz2x65XUKQAnHV_9o{-&C3vBG0@JD)D*e|GDu=DQ_{yW3WY@>WR7P({ z7IxTr8HWDinDR0DZ_MCzhh0s{vxa+8Os?}rUeFp3sl61pZ<6ppRuP;-FfcCJ)?pcK zF>P#&&3q%%eW|(viQ=Wf;W`0{XAabIglMCl`xaaA*|&$ChqL@;DWAHYweLA^mF zry0#KKJUb*#Ea#MTHTCRd#*N8+k!14mIW^B;58@fpw@xU3s#WcFm%{>UD_IaYZpq> zF}%%kYhfz|<(|bJK?pQm#pcZ_BM90;8yu*w+$K;YhFeBe}&U76Smz zo=$WhPcL8UuU=m20cSnv<`BN!|4)9)_|=qfzE>|_WVU$k0_Vv;5!O%8ixDZ4M*zSV zev15%->r98a21OM%_wL=GIkUkL<97vY^EB|hyQ}*6hSgq6^?Zz@|~OcBKuts0MG&# LDHH^hxK92Dt5T}| delta 1549 zcmZ8h4K&kh7~gEM63sTIC1JL)QS+V45N)i;jJOPUscs=uKBBHhHx#M(BVR4<_1(Cd zY;L}yoA2*bEH^UhqNDPe8+E5Sr*nJHdCvJg&-*;@^PJ!N{@wycK0}dl5CTPkWMD85 zG-HWzPmv3Tu7j#d@HVi*IucY;%aITehyrxU5O-W{hcay~=$+dBXI1!HiRUA=hj)Kz z2xP_g(E%k0ic>5iZX%#>F8I+RdAtk182&V^IJgNu_k))ye2%8-rID=iS3q3w%wBpR=9H8 zRO7q{+{s)pR+GgaG(Jh3Gt{?}o0O;BHzeM(a?#>(T)dy~+MbuUZ3>x46!*vu9q-Fl zjzsqQB`2L|&N1XeWO)26-x`ks3pOu!jY^pck99bz+&kmm4SiO{N~)$(+s4~0!2c@e z|8SkrxM@U+1_F5wb_RBna!F%d@e=sujtw0{ZTzi*z7 zQ`O^KE^~f7*;kMm^T5s3F8omata%x#(Z0|Ynw|3G8oA5_+vk00cnkCSL*?9cu+C6fuAGVqTmjXLY;aJ)^24Q>>fBNMWF2*!$VK&rP4wQ`6hig!ut(tU*EQ z2gc~C7o2+}e17!~;%@$Dh$yM}xPK#Ib>!!_Xe>h`!%ozX zraoFR4iKE|WVQEfu|BxpASzMm0<$jx+taTS{##VSCpW7wecxAQJfpOsl!&sKbG7Uh z#K_vF|Er`5CQFgZ1fa_mN%b->$KOy+>1KDBGzLM?HeyalSuku}P0kg_AEhbg-SHnT=V!xHYOGI1DS0wz}J}?PJ%nu ziO4#fT$;G)(cu|-?#QPS!qL%Xs`U<@E{AT-z2lqU5*mcvLW;egoT_FL(Pz3)=SbRa zlP51;aw~W-(v*L0-{S&rw?<^LFT?XdbL$9UGJ5HKjaRC`Pq}kA+E?%JUH)sK$%(}` zA2O3Z8}${K`OI+O&M^ibCPPkgK;Q9QsC<2cZ!@$|%IzH5K~{>a)LS=L-mGB)`5FUk zv0YMt(56U%tG3B^-&wl0p>(TL8v|YjUTc$ft=~}cn`Yw>5C{}4v7Hk8w)O&KoSw9V zjl;-{%K=~*3b={eDvjmgFyKs}7N;(C|CXf8DFI3d6rh0LNZEsyMFS2`{bFi