mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-28 17:20:47 +08:00
OpenDocument Writer: Implement table cell alignment (#6700)
Co-authored-by: Mauro Bieg <mb21@users.noreply.github.com>
This commit is contained in:
@@ -492,7 +492,6 @@ tableRowToOpenDocument o ns r =
|
||||
in inTagsIndented "table:table-row" . vcat <$>
|
||||
mapM (tableItemToOpenDocument o "TableRowCell") (zip ns c)
|
||||
|
||||
|
||||
colspanAttrib :: ColSpan -> [(Text, Text)]
|
||||
colspanAttrib cs =
|
||||
case cs of
|
||||
@@ -505,17 +504,32 @@ rowspanAttrib rs =
|
||||
RowSpan 1 -> mempty
|
||||
RowSpan n -> [("table:number-rows-spanned", tshow n)]
|
||||
|
||||
alignAttrib :: Alignment -> [(Text,Text)]
|
||||
alignAttrib a = case a of
|
||||
AlignRight -> ("fo:text-align","end") : style
|
||||
AlignCenter -> ("fo:text-align","center") : style
|
||||
_ -> []
|
||||
where
|
||||
style = [("style:justify-single-word","false")]
|
||||
|
||||
tableItemToOpenDocument :: PandocMonad m
|
||||
=> WriterOptions -> Text -> (Text,Ann.Cell)
|
||||
-> OD m (Doc Text)
|
||||
tableItemToOpenDocument o s (n,c) =
|
||||
let (Ann.Cell _colspecs _colnum (Cell _ _ rs cs i) ) = c
|
||||
tableItemToOpenDocument o s (n,c) = do
|
||||
let (Ann.Cell _colspecs _colnum (Cell _ align rs cs i) ) = c
|
||||
csa = colspanAttrib cs
|
||||
rsa = rowspanAttrib rs
|
||||
aa = alignAttrib align
|
||||
a = [ ("table:style-name" , s )
|
||||
, ("office:value-type", "string" ) ] ++ csa ++ rsa
|
||||
in inTags True "table:table-cell" a <$>
|
||||
withParagraphStyle o n (map plainToPara i)
|
||||
itemParaStyle <- case aa of
|
||||
[] -> return 0
|
||||
_ -> paraStyleFromParent n aa
|
||||
let itemParaStyle' = case itemParaStyle of
|
||||
0 -> n
|
||||
x -> "P" <> tshow x
|
||||
inTags True "table:table-cell" a <$>
|
||||
withParagraphStyle o itemParaStyle' (map plainToPara i)
|
||||
|
||||
-- | Convert a list of inline elements to OpenDocument.
|
||||
inlinesToOpenDocument :: PandocMonad m => WriterOptions -> [Inline] -> OD m (Doc Text)
|
||||
@@ -713,6 +727,20 @@ paraStyle attrs = do
|
||||
addParaStyle $ inTags True "style:style" (styleAttr <> attrs) paraProps
|
||||
return pn
|
||||
|
||||
paraStyleFromParent :: PandocMonad m => Text -> [(Text,Text)] -> OD m Int
|
||||
paraStyleFromParent parent attrs = do
|
||||
pn <- (+) 1 . length <$> gets stParaStyles
|
||||
let styleAttr = [ ("style:name" , "P" <> tshow pn)
|
||||
, ("style:family" , "paragraph")
|
||||
, ("style:parent-style-name", parent)]
|
||||
paraProps = if null attrs
|
||||
then mempty
|
||||
else selfClosingTag
|
||||
"style:paragraph-properties" attrs
|
||||
addParaStyle $ inTags True "style:style" styleAttr paraProps
|
||||
return pn
|
||||
|
||||
|
||||
paraListStyle :: PandocMonad m => Int -> OD m Int
|
||||
paraListStyle l = paraStyle
|
||||
[("style:parent-style-name","Text_20_body")
|
||||
|
||||
@@ -35,3 +35,48 @@
|
||||
(TableFoot ("",[],[])
|
||||
[])]
|
||||
```
|
||||
```
|
||||
% pandoc -f native -t opendocument --quiet
|
||||
[Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
(TableHead ("",[],[])
|
||||
[])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
[]
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "1"]]
|
||||
,Cell ("",[],[]) AlignLeft (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "2"]]
|
||||
,Cell ("",[],[]) AlignRight (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "3"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "4"]]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])]
|
||||
^D
|
||||
<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-column table:style-name="Table1.C" />
|
||||
<table:table-column table:style-name="Table1.D" />
|
||||
<table:table-row>
|
||||
<table:table-cell table:style-name="TableRowCell" office:value-type="string">
|
||||
<text:p text:style-name="P1">1</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="TableRowCell" office:value-type="string">
|
||||
<text:p text:style-name="Table_20_Contents">2</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="TableRowCell" office:value-type="string">
|
||||
<text:p text:style-name="P2">3</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="TableRowCell" office:value-type="string">
|
||||
<text:p text:style-name="Table_20_Contents">4</text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
```
|
||||
|
||||
@@ -142,47 +142,47 @@
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
[]
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
|
||||
[Para [Strong [Str "Octet",Space,Str "no.",Space,Str "1"]]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
|
||||
[Para [Strong [Str "Octet",Space,Str "no.",Space,Str "2"]]]]
|
||||
,Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "16"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "15"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "14"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "13"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "12"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "11"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "10"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "9"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "8"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "7"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "6"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "5"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "4"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "3"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "2"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "1"]]]
|
||||
,Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
|
||||
[Para [Str "Code",Space,Str "A"]]
|
||||
,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 8)
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 8)
|
||||
[Para [Str "Code",Space,Str "B"]]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])]
|
||||
|
||||
Reference in New Issue
Block a user