From 015dead0bb2bb5cea06a0fa366fdd651c8e07889 Mon Sep 17 00:00:00 2001
From: hubertp-lshift <hubertp@lshift.de>
Date: Sat, 26 Nov 2016 21:45:56 +0100
Subject: [PATCH] [odt] Infer table's caption from the paragraph (#3224)

ODT's reader always put empty captions for the parsed
tables. This commit
1) checks paragraphs that follow the table definition
2) treats specially a paragraph with a style named 'Table'
3) does some postprocessing of the paragraphs that combines
 tables followed immediately by captions

The ODT writer used 'TableCaption' style name for the caption
paragraph. This commit follows the open office approach which
allows for appending captions to table but uses a built-in style
named 'Table' instead of 'TableCaption'. Any users of odt format
(both writer and reader) are therefore required to change the
style's name to 'Table', if necessary.
---
 data/odt/styles.xml                           |   2 +-
 src/Text/Pandoc/Readers/Odt/ContentReader.hs  |  27 ++++++++++++++----
 src/Text/Pandoc/Writers/OpenDocument.hs       |   2 +-
 tests/Tests/Readers/Odt.hs                    |   1 +
 .../odt/native/simpleTableWithCaption.native  |   1 +
 tests/odt/odt/simpleTableWithCaption.odt      | Bin 0 -> 10396 bytes
 tests/tables.opendocument                     |  10 +++----
 7 files changed, 29 insertions(+), 14 deletions(-)
 create mode 100644 tests/odt/native/simpleTableWithCaption.native
 create mode 100644 tests/odt/odt/simpleTableWithCaption.odt

diff --git a/data/odt/styles.xml b/data/odt/styles.xml
index 1f1e2c5c8..623a89051 100644
--- a/data/odt/styles.xml
+++ b/data/odt/styles.xml
@@ -133,7 +133,7 @@ xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2">
       style:font-size-complex="12pt"
       style:font-style-complex="italic" />
     </style:style>
-    <style:style style:name="TableCaption" style:family="paragraph"
+    <style:style style:name="Table" style:family="paragraph"
     style:parent-style-name="Caption" style:class="extra">
     </style:style>
     <style:style style:name="FigureCaption" style:family="paragraph"
diff --git a/src/Text/Pandoc/Readers/Odt/ContentReader.hs b/src/Text/Pandoc/Readers/Odt/ContentReader.hs
index 3a6a99237..2672b01ef 100644
--- a/src/Text/Pandoc/Readers/Odt/ContentReader.hs
+++ b/src/Text/Pandoc/Readers/Odt/ContentReader.hs
@@ -312,7 +312,7 @@ withNewStyle a = proc x -> do
   where
     isCodeStyle :: StyleName -> Bool
     isCodeStyle "Source_Text" = True
-    isCodeStyle _              = False
+    isCodeStyle _             = False
 
     inlineCode :: Inlines -> Inlines
     inlineCode = code . intercalate "" . map stringify . toList
@@ -415,12 +415,18 @@ constructPara reader = proc blocks -> do
   fStyle <- readStyleByName -< blocks
   case fStyle of
     Left   _    -> reader -< blocks
+    Right (styleName, _) | isTableCaptionStyle styleName -> do
+      blocks' <- reader   -< blocks
+      arr tableCaptionP  -< blocks'
     Right (_, style) -> do
       let modifier = getParaModifier style
-      blocks' <- reader -< blocks
-      arr modifier -<< blocks'
-
-
+      blocks' <- reader   -<  blocks
+      arr modifier        -<< blocks'
+  where
+    isTableCaptionStyle :: StyleName -> Bool
+    isTableCaptionStyle "Table" = True
+    isTableCaptionStyle _       = False
+    tableCaptionP b = divWith ("", ["caption"], []) b
 
 type ListConstructor = [Blocks] -> Blocks
 
@@ -904,6 +910,15 @@ read_text = matchChildContent' [ read_header
                                ]
             >>^ doc
 
+post_process :: Pandoc -> Pandoc
+post_process (Pandoc m blocks) =
+  Pandoc m (post_process' blocks)
+
+post_process' :: [Block] -> [Block]
+post_process' ((Table _ a w h r) : (Div ("", ["caption"], _) [Para inlines] ) : xs) =
+  (Table inlines a w h r) : ( post_process' xs )
+post_process' bs = bs
+
 read_body :: OdtReader _x (Pandoc, MediaBag)
 read_body = executeIn NsOffice "body"
           $ executeIn NsOffice "text"
@@ -911,4 +926,4 @@ read_body = executeIn NsOffice "body"
           $ proc inlines -> do
              txt   <- read_text     -< inlines
              state <- getExtraState -< ()
-             returnA                -< (txt, getMediaBag state)
+             returnA                -< (post_process txt, getMediaBag state)
diff --git a/src/Text/Pandoc/Writers/OpenDocument.hs b/src/Text/Pandoc/Writers/OpenDocument.hs
index 42c151780..8bd0f469e 100644
--- a/src/Text/Pandoc/Writers/OpenDocument.hs
+++ b/src/Text/Pandoc/Writers/OpenDocument.hs
@@ -336,7 +336,7 @@ blockToOpenDocument o bs
         mapM_ addParaStyle . newPara $ paraHStyles ++ paraStyles
         captionDoc <- if null c
                       then return empty
-                      else withParagraphStyle o "TableCaption" [Para c]
+                      else withParagraphStyle o "Table" [Para c]
         th <- if all null h
                  then return empty
                  else colHeadsToOpenDocument o name (map fst paraHStyles) h
diff --git a/tests/Tests/Readers/Odt.hs b/tests/Tests/Readers/Odt.hs
index d6ed48f8d..cd764dd62 100644
--- a/tests/Tests/Readers/Odt.hs
+++ b/tests/Tests/Readers/Odt.hs
@@ -157,6 +157,7 @@ namesOfTestsComparingToNative   = [ "blockquote"
                                   , "referenceToListItem"
                                   , "referenceToText"
                                   , "simpleTable"
+                                  , "simpleTableWithCaption"
 --                                , "table"
                                   , "unicode"
                                   , "unorderedList"
diff --git a/tests/odt/native/simpleTableWithCaption.native b/tests/odt/native/simpleTableWithCaption.native
new file mode 100644
index 000000000..18d68b772
--- /dev/null
+++ b/tests/odt/native/simpleTableWithCaption.native
@@ -0,0 +1 @@
+[Table [Str "Table",Space,Str "1:",Space,Str "Some",Space,Str "caption",Space,Str "for",Space,Str "a",Space,Str "table"] [AlignDefault,AlignDefault] [0.0,0.0] [[],[]] [[[Plain [Str "Content"]],[Plain [Str "More",Space,Str "content"]]]],Para []]
diff --git a/tests/odt/odt/simpleTableWithCaption.odt b/tests/odt/odt/simpleTableWithCaption.odt
new file mode 100644
index 0000000000000000000000000000000000000000..ec6fac89471c6124d2defc78057f6e908dfb0ce8
GIT binary patch
literal 10396
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

literal 0
HcmV?d00001

diff --git a/tests/tables.opendocument b/tests/tables.opendocument
index aa35abc91..0765bb783 100644
--- a/tests/tables.opendocument
+++ b/tests/tables.opendocument
@@ -63,8 +63,7 @@
     </table:table-cell>
   </table:table-row>
 </table:table>
-<text:p text:style-name="TableCaption">Demonstration of simple table
-syntax.</text:p>
+<text:p text:style-name="Table">Demonstration of simple table syntax.</text:p>
 <text:p text:style-name="First_20_paragraph">Simple table without
 caption:</text:p>
 <table:table table:name="Table2" table:style-name="Table2">
@@ -197,8 +196,7 @@ spaces:</text:p>
     </table:table-cell>
   </table:table-row>
 </table:table>
-<text:p text:style-name="TableCaption">Demonstration of simple table
-syntax.</text:p>
+<text:p text:style-name="Table">Demonstration of simple table syntax.</text:p>
 <text:p text:style-name="First_20_paragraph">Multiline table with
 caption:</text:p>
 <table:table table:name="Table4" table:style-name="Table4">
@@ -253,8 +251,8 @@ caption:</text:p>
     </table:table-cell>
   </table:table-row>
 </table:table>
-<text:p text:style-name="TableCaption">Here's the caption. It may span
-multiple lines.</text:p>
+<text:p text:style-name="Table">Here's the caption. It may span multiple
+lines.</text:p>
 <text:p text:style-name="First_20_paragraph">Multiline table without
 caption:</text:p>
 <table:table table:name="Table5" table:style-name="Table5">