From f3c9d3788530e450d1bb23a4fd829bc5a6eed266 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Wed, 5 Mar 2014 13:01:23 -0800
Subject: [PATCH] HTML writer: Add colgroup around col tags.

Also affects EPUB writer.
Closes #877.
---
 src/Text/Pandoc/Writers/HTML.hs | 15 ++++++++++-----
 tests/tables.html               |  6 ++++++
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index 3ac2a836f..e0385af25 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -533,11 +533,16 @@ blockToHtml opts (Table capt aligns widths headers rows') = do
   let percent w = show (truncate (100*w) :: Integer) ++ "%"
   let coltags = if all (== 0.0) widths
                    then mempty
-                   else mconcat $ map (\w ->
-                          if writerHtml5 opts
-                             then H.col ! A.style (toValue $ "width: " ++ percent w)
-                             else H.col ! A.width (toValue $ percent w) >> nl opts)
-                          widths
+                   else do
+                     H.colgroup $ do
+                       nl opts
+                       mapM_ (\w -> do
+                            if writerHtml5 opts
+                               then H.col ! A.style (toValue $ "width: " ++
+                                                      percent w)
+                               else H.col ! A.width (toValue $ percent w)
+                            nl opts) widths
+                     nl opts
   head' <- if all null headers
               then return mempty
               else do
diff --git a/tests/tables.html b/tests/tables.html
index b72aa784e..a9b2b247d 100644
--- a/tests/tables.html
+++ b/tests/tables.html
@@ -96,10 +96,12 @@
 <p>Multiline table with caption:</p>
 <table>
 <caption>Here's the caption. It may span multiple lines.</caption>
+<colgroup>
 <col width="15%" />
 <col width="13%" />
 <col width="16%" />
 <col width="33%" />
+</colgroup>
 <thead>
 <tr class="header">
 <th align="center">Centered Header</th>
@@ -125,10 +127,12 @@
 </table>
 <p>Multiline table without caption:</p>
 <table>
+<colgroup>
 <col width="15%" />
 <col width="13%" />
 <col width="16%" />
 <col width="33%" />
+</colgroup>
 <thead>
 <tr class="header">
 <th align="center">Centered Header</th>
@@ -177,10 +181,12 @@
 </table>
 <p>Multiline table without column headers:</p>
 <table>
+<colgroup>
 <col width="15%" />
 <col width="13%" />
 <col width="16%" />
 <col width="33%" />
+</colgroup>
 <tbody>
 <tr class="odd">
 <td align="center">First</td>