aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Carlson <nils@nilscarlson.se>2020-11-21 20:42:43 +0000
committerGitHub <noreply@github.com>2020-11-21 12:42:43 -0800
commitae52918faa36ad59deca3561acce79ad6d3ea0c2 (patch)
treefda9b54c36f0629c1c99b5818830b993bdd05451
parent7db2cf5d2f637fc73377e32af776002e3670ef50 (diff)
downloadpandoc-ae52918faa36ad59deca3561acce79ad6d3ea0c2.tar.gz
OpenDocument writer: Table text width support (#6792)
Support for table width as a percentage of text width by summing width of columns and verifying that the sum is > 0 and <= 1.
-rw-r--r--src/Text/Pandoc/Writers/OpenDocument.hs14
-rw-r--r--test/command/6792.md66
2 files changed, 76 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Writers/OpenDocument.hs b/src/Text/Pandoc/Writers/OpenDocument.hs
index 8f010d766..789dbe9b0 100644
--- a/src/Text/Pandoc/Writers/OpenDocument.hs
+++ b/src/Text/Pandoc/Writers/OpenDocument.hs
@@ -407,13 +407,14 @@ blockToOpenDocument o bs
fromWidth (ColWidth w) | w > 0 = w
fromWidth _ = 0
widths = map fromWidth mwidths
+ textWidth = sum widths
columnIds = zip genIds widths
mkColumn n = selfClosingTag "table:table-column" [("table:style-name", name <> "." <> T.singleton (fst n))]
columns = map mkColumn columnIds
paraHStyles = paraTableStyles "Heading" pn aligns
paraStyles = paraTableStyles "Contents" (pn + length (newPara paraHStyles)) aligns
newPara = map snd . filter (not . isEmpty . snd)
- addTableStyle $ tableStyle tn columnIds
+ addTableStyle $ tableStyle tn textWidth columnIds
mapM_ addParaStyle . newPara $ paraHStyles ++ paraStyles
captionDoc <- if null c
then return empty
@@ -684,14 +685,19 @@ listLevelStyle i =
, ("fo:margin-left", indent <> "in")
]
-tableStyle :: Int -> [(Char,Double)] -> Doc Text
-tableStyle num wcs =
+tableStyle :: Int -> Double -> [(Char,Double)] -> Doc Text
+tableStyle num textWidth wcs =
let tableId = "Table" <> tshow (num + 1)
+ tableWidthAttr :: [(Text,Text)]
+ tableWidthAttr
+ | textWidth <= 1 && textWidth > 0 = [("style:rel-width",
+ T.pack (show (round (textWidth * 100) :: Int) <> "%"))]
+ | otherwise = []
table = inTags True "style:style"
[("style:name", tableId)
,("style:family", "table")] $
selfClosingTag "style:table-properties"
- [("table:align" , "center")]
+ (("table:align", "center") : tableWidthAttr)
colStyle (c,0) = selfClosingTag "style:style"
[ ("style:name" , tableId <> "." <> T.singleton c)
, ("style:family", "table-column" )]
diff --git a/test/command/6792.md b/test/command/6792.md
new file mode 100644
index 000000000..3d31942fe
--- /dev/null
+++ b/test/command/6792.md
@@ -0,0 +1,66 @@
+```
+% pandoc -f native -t opendocument -s --quiet
+[Table ("",[],[]) (Caption Nothing
+ [])
+ [(AlignDefault,ColWidth 0.25)
+ ,(AlignDefault,ColWidth 0.25)]
+ (TableHead ("",[],[])
+ [])
+ [(TableBody ("",[],[]) (RowHeadColumns 0)
+ []
+ [Row ("",[],[])
+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
+ [Para [Str "2"]]
+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
+ [Para [Str "1"]]]])]
+ (TableFoot ("",[],[])
+ [])]
+^D
+<?xml version="1.0" encoding="utf-8" ?>
+<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.2">
+ <office:font-face-decls>
+ <style:font-face style:name="Courier New" style:font-family-generic="modern" style:font-pitch="fixed" svg:font-family="'Courier New'" />
+ </office:font-face-decls>
+ <office:automatic-styles>
+ <style:style style:name="fr2" style:family="graphic" style:parent-style-name="Formula"><style:graphic-properties style:vertical-pos="middle" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" style:wrap="none" /></style:style>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Formula"><style:graphic-properties style:vertical-pos="middle" style:vertical-rel="text" /></style:style>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" />
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" />
+ </style:style>
+ <style:style style:name="TableHeaderRowCell" style:family="table-cell">
+ <style:table-cell-properties fo:border="none" />
+ </style:style>
+ <style:style style:name="TableRowCell" style:family="table-cell">
+ <style:table-cell-properties fo:border="none" />
+ </style:style>
+ <style:style style:name="Table1" style:family="table">
+ <style:table-properties table:align="center" style:rel-width="50%" />
+ </style:style>
+ <style:style style:name="Table1.A" style:family="table-column">
+ <style:table-column-properties style:rel-column-width="16383*" />
+ </style:style>
+ <style:style style:name="Table1.B" style:family="table-column">
+ <style:table-column-properties style:rel-column-width="16383*" />
+ </style:style>
+ </office:automatic-styles>
+<office:body>
+<office:text>
+<table:table table:name="Table1" table:style-name="Table1">
+ <table:table-column table:style-name="Table1.A" />
+ <table:table-column table:style-name="Table1.B" />
+ <table:table-row>
+ <table:table-cell table:style-name="TableRowCell" office:value-type="string">
+ <text:p text:style-name="P1">2</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="TableRowCell" office:value-type="string">
+ <text:p text:style-name="P2">1</text:p>
+ </table:table-cell>
+ </table:table-row>
+</table:table>
+</office:text>
+</office:body>
+</office:document-content>
+```